2013-12-10 183 views
0

ASP.NET 4.5/C#/ SQL 2012另一個ASP.NET自定義成員資格/角色提供

我已經有一個用戶表和角色/權限列一個定義良好的數據庫。該列包含角色的分隔列表。我希望在後端使用ASP.NET的內置功能,所以我可以懶惰,並使用諸如按角色篩選和按角色篩選。我想從數據庫中讀取我的角色,並告訴ASP這些是我的用戶所在的角色。自定義...但希望很簡單。以下是我迄今爲止:

 //create an identity 
     GenericIdentity objIdentity = new GenericIdentity("Matt"); //this would actually be the username/email of the newly authenticated user 

     //get roles for user 
     string[] strRoles = { "ADW", "USR" }; //this will get read from the database on authentication 

     //add identity and roles to a principal 
     GenericPrincipal objPrincipal = new GenericPrincipal(objIdentity, strRoles);   

     //add to current user 
     HttpContext.Current.User = objPrincipal; 

     //add the principal to the current context of the current thread 
     Thread.CurrentPrincipal = objPrincipal; //not sure what this does, doesn't affect my results/tests 

如果我執行上面的代碼,然後運行以下命令:

Response.Write(User.IsInRole("ADW")); 
Response.Write(User.IsInRole("xxx")); 

我得到一個真正的/預期假。但是,這不會持續到下一頁。我對定製的成員/角色提供者做了大量的閱讀,但是我找不到這個具體的用例。大多數人都在談論爲此任務專門設置數據庫。我也看到提到了更新的簡單會員,但是也沒有從這方面得到任何的愛。我希望有一個解決方案涉及我已經在做的事情。我很想在用戶驗證時執行此代碼,但能夠在其他頁面中引用此用戶。我可以隨時調用數據庫來查看每個頁面。我假設會吸引人,而這不是內置提供者所做的。

謝謝大家。

回答

0

你正在從錯誤的一面接近它。假設您未創建自定義身份驗證模塊,則不必手動創建身份和主體。

在任何其他情況下,您只選擇持久性機制,並且相應的認證模塊根據持久性設置標識/主體。

常用的持久性機制是表單身份驗證,您可以在其中發出表單Cookie。表單驗證模塊確保身份驗證/主體在流水線早期設置,並將cookie作爲信息源。

如果您想用您的自定義cookie替換cookie(換句話說 - 用您自己的替換形式認證) - 您必須想辦法將安全信息保存到cookie中。

但是請注意,這可能不是必需的。任何自定義成員資格和角色提供者都可以使用完全相同的表單身份驗證。這是因爲這兩者具有不同的責任 - 成員提供者用於實際認證,而表單認證模塊用於持續連續請求的信息。

編輯:以使其在用戶數據庫持久添加一個角色的用戶:

Roles.AddUsersToRoles(...); 

但首先,你必須在用戶數據庫中創建用戶:

Membership.CreateUser(...); 

請注意,RolesMembership是實際角色和會員提供商的立面。雖然默認提供程序使用成員資格數據庫,但您可以輕鬆創建自定義提供程序,以在服務器端的任何位置保存信息。

+0

我不完全明白。我試圖利用諸如讀取角色的LoginView和web.config權限。我想從代碼隱藏中爲當前用戶添加一個角色。 – Matt

+0

這是RoleProvider用於讀取角色並將其存儲到數據庫的內容。爲了登錄用戶,必須使用表單cookie。 –

+0

編輯我的答案。仍然不確定你錯過了哪部分。 –

相關問題