2015-05-20 102 views
-1

我正在使用包含一些角色的Asp.Net角色提供者。我想添加一些來自其他數據庫的其他角色。有沒有辦法在來自角色提供者的角色和來自其他數據庫的角色之間進行某種「聯合」?將角色動態添加到asp.net角色提供者

更確切地說,我使用表單身份驗證,我從其他數據庫檢索角色並將它們存儲在FormsAuthenticationTicket中。然後在Global.Asax的AuthenticateRequest中,我使用角色列表生成主體。但稍後在使用User.IsInRole時,它不適用於我在AuthenticateRequest中分配的角色列表。什麼是正確的方向去?

基督教

+0

要麼你必須a)重寫方法GetRolesForUser(這是什麼IsInRole使用)在自定義角色提供者(IPrincipal)來使用您的主要角色表,而是醜陋:保持這兩個表同步,或c)使用不同的自定義方法來替換您對IsInRole的使用(也相當醜陋)。下面的答案是b的變體。 – Christopher

+0

我最終做的是將角色從我的外部數據庫存儲在HttpContext.Current.Items中,同時讓RoleProvider從其側面完成工作。這使得角色檢查有點棘手,但這對我來說只是一個難得的快速勝利。感謝你的幫助。 – user957479

回答

1

您可以在運行時創建的角色:

Dim strNewRole as String = "NEW" 

If Not Roles.RoleExists(strNewRole) Then 
    Roles.CreateRole(strNewRole) 
End If 

所以,你仍然可以使用你的代碼可以從另一數據庫角色,然後使用上面的代碼,每一個角色。