在一个新项目中,我打算分别使用ActiveDirectoryMembershipProvider和SqlRoleProvider来提供身份验证和授权。
我不清楚的一件事是如何处理维护 - 当从Active Directory中删除已登录和已分配角色的用户时,如何删除SqlRoleProvider使用的映射表中的孤立记录?我相信这是aspnet_UsersInRoles表。
可以定期向已禁用的用户查询Active Directory,然后遍历该列表,调用Roles.RemoveUserFromRoles(UserId,Roles.GetRolesForUser(UserId)),其中UserId也在aspnet_UsersInRoles中。对于一个大型组织来说,我想象的速度非常缓慢。
或者,对于UsersInRoles中的每个distint UserId,查询ActiveDirectory并确保userAccountControl属性的位掩码不表示该帐户已被禁用。对于大量应用程序用户来说效率也非常低。
更丑陋但更有效的方法是存储上次登录日期,并定期清除未登录的用户的角色关联,比如六个月。这可能会引起麻烦。
我很想听听建议。
答案 0 :(得分:0)
是的,你必须手动进行清理。你需要即时更新吗?如果您可以执行每晚运行的批处理,那么这将是有效的,因为它在核心运营时间内没有运行。或者,一旦您意识到它就可以在另一个线程中启动进程来处理删除角色。删除每个用户访问的角色会分享用户的命中率,并让他们认为应用程序运行缓慢。
删除了多少次角色?如果很多,那么考虑一个批处理过程,如果在几年内一次,那么在某些过程中将其用于应用程序可能不是一个问题。
就如何使用API而言,aspnet_UsersInRoles和aspnet_roles表也可以通过SQL脚本自行删除。
HTH。