В новом проекте я планирую использовать ActiveDirectoryMembershipProvider и SqlRoleProvider для обеспечения аутентификации и авторизации соответственно.
Одна вещь, которая мне не ясна, это то, как обрабатывается обслуживание - когда пользователи, вошедшие в систему и которым назначены роли, удаляются из Active Directory, как вы удаляете потерянные записи в таблице сопоставления, используемой SqlRoleProvider? Я считаю, что это таблица aspnet_UsersInRoles.
Можно периодически запрашивать Active Directory для отключенных пользователей, затем выполнять итерацию по этому списку, вызывая Roles.RemoveUserFromRoles (UserId, Roles.GetRolesForUser (UserId)), где UserId также находится в aspnet_UsersInRoles. Я бы сказал, что это очень медленно, для большой организации.
Или, в качестве альтернативы, для каждого удаленного UserId в UsersInRoles запросите ActiveDirectory и убедитесь, что битовая маска атрибута userAccountControl не означает, что учетная запись отключена. Также очень неэффективно, для большого количества пользователей приложений.
Еще более уродливый, но гораздо более эффективный подход - хранить дату последнего входа в систему и периодически очищать ассоциации ролей для пользователей, которые не выполнили вход, скажем, в течение шести месяцев. Это может вызвать головную боль.
Я хотел бы услышать предложения.