Позвольте мне преобразовать комментарий в ответ и изнасиловать ответы Зака и Джеймса, чтобы предоставить то, что, по моему мнению, было бы работоспособным решением без необходимости входа в ' пользовательскую зону провайдера '. Хотя написание пользовательских провайдеров не очень сложно, я считаю, что если вы можете заставить встроенных провайдеров делать то, что вы хотите, даже если это требует запаха здесь или там, это всегда лучший путь.
Добавьте роль, скажем, WellGroomedAndBehavesSelf
, которая контролирует доступ к вещам, к которым у пользователей должен быть хороший уход и поведение.
Реализация профиля в вашем файле web.config и добавление свойства ReinstateDate
(или UngroundedOnDate
;-D).
Если пользователь плохо себя ведет, удалите его из роли WellGroomedAndBehavesSelf
и установите свойство профиля ReinstateDate
.
В логике входа в систему переопределите OnAuthenticate
и проверьте свойство профиля ReinstateDate
, если оно присутствует и передано, очистите его и добавьте пользователя в роль WellGroomedAndBehavesSelf
.
Готово и нет необходимости в пользовательских провайдерах.
UPDATE:
Альтернативный подход, и, возможно, более надежный, предотвращающий вечное заземление пользователей, если профиль каким-либо образом очищается в другом месте, чем логика входа в систему, заключается в проверке роли WellGroomedAndBehavesSelf
, а в случае ее отсутствия ТОГДА проверяет профиль на ReinstateDate
. Если он прошел или отсутствует, верните пользователя в WellGroomedAndBehavesSelf
.
Тот же эффект, но незначительное изменение в логике обеспечит более надежное решение.
Как реализовать профили:
Если вы используете веб-сайт Сайт проекта, посмотрите здесь .
Если вы используете веб-приложение , проект выглядит здесь .