在一个新项目中,我计划使用ActiveDirectoryMembershipProvider和SqlRoleProvider分别提供身份验证和授权。
我不清楚的一件事是如何处理维护--从Active Directory中删除已登录并分配了角色的用户时,如何删除SqlRoleProvider使用的映射表中的孤立记录?我相信这是aspnet_UsersInRoles的桌子。
用户可以定期查询Active Directory中的禁用用户,然后遍历该列表,调用Roles.RemoveUserFromRoles( UserId,Roles.GetRolesForUser(UserId)),其中UserId也在aspnet_UsersInRoles中。我可以想象,对于一个大型组织来说,速度非常慢。
或者,对于UsersInRoles中的每个distint UserId,查询ActiveDirectory并确保userAccountControl属性的位掩码没有指示帐户被禁用。对于大量的应用程序用户来说,效率也非常低。
一种更难看但更有效的方法是存储上次登录日期,并定期清除未登录的用户的角色关联,例如,6个月。这可能会引起头痛。
我很想听听你的建议。
发布于 2010-12-18 09:59:41
是的,您必须手动进行清理。你需要即时更新吗?如果您可以进行夜间运行的批处理,这将是高效的,因为它不是在核心运行时间运行的。或者,一旦您意识到角色的删除,在另一个线程中启动一个进程来处理该角色的删除可能是有意义的。删除每个用户访问的角色会在用户之间共享冲击,并使他们认为应用程序速度很慢。
角色被删除了多少次?如果很多,那么考虑批处理过程,如果几年一次,那么在某些过程中将其应用到应用程序中可能不是什么大问题。
至于方式,您也可以使用API,但是aspnet_UsersInRoles和aspnet_roles表也可以通过SQL脚本轻松地自行擦除。
HTH。
https://stackoverflow.com/questions/4475983
复制相似问题