2010-12-18 55 views
0

在一個新項目中,我打算分別使用ActiveDirectoryMembershipProvider和SqlRoleProvider來提供身份驗證和授權。ActiveDirectoryMembershipProvider和SqlRoleProvider:維護?

有一點我不清楚的是如何處理維護 - 當已經登錄並被分配角色的用戶從Active Directory中刪除時,如何刪除SqlRoleProvider使用的映射表中的孤立記錄?我相信這是aspnet_UsersInRoles表。

可以定期查詢禁用用戶的Active Directory,然後遍歷該列表調用Roles.RemoveUserFromRoles(UserId,Roles.GetRolesForUser(UserId)),其中UserId也位於aspnet_UsersInRoles中。我想,對於一個大型組織來說,非常緩慢。

或者,對於UsersInRoles中的每個distint UserId,查詢Ac​​tiveDirectory並確保userAccountControl屬性的位掩碼不表示帳戶已禁用。對於大量的應用程序用戶來說,效率也很低。

一個更醜陋,但更有效的方法是存儲最後一次登錄日期,並定期清除未登錄六個月的用戶的角色關聯。這可能會導致頭痛。

我很樂意聽取建議。

回答

0

是的,你必須手動進行清理。你需要瞬間更新嗎?如果您可以執行夜間運行的批處理流程,那麼這將非常有效,因爲它在覈心運行時間內沒有運行。或者,在您意識到這一點後,啓動另一個線程中的進程以處理角色的刪除可能是有意義的。刪除每個用戶訪問的角色可以共享用戶的興趣,並使他們認爲應用程序很慢。

角色被刪除多少次?如果很多,那麼考慮一個批處理過程,如果在幾年之內,那麼在某個過程中將其應用到應用程序中可能不是那麼重要。至於如何也可以使用API​​,但aspnet_UsersInRoles和aspnet_roles表也可以通過SQL腳本自行刪除。

HTH。