2008-11-11 28 views
6

我正在使用ASP.NET Membership,並注意到Roles class修改沒有一個方法的作用(例如它的名字),只能創建和刪除它們。如何在.NET中使用Membership來重命名角色?

它可能或不支持?

編輯:@CheGueVerra:是的,很好的解決方法。

你知道嗎(對於額外的信用:))爲什麼這是不可能的?

+0

爲什麼這是不可能的:沒有基類[公共抽象類RoleProvider:的ProviderBase] 爲什麼他們選擇不執行它,我不知道);我會讓你提問 – CheGueVerra 2008-11-12 16:31:17

回答

19

沒有直接的方法來更改成員資格提供程序中的角色名稱。

我將獲取要重命名的角色中的用戶列表,然後將其從列表中刪除,刪除角色,使用新名稱創建角色,然後將之前找到的用戶添加到角色中新的名字。

public void RenameRoleAndUsers(string OldRoleName, string NewRoleName) 
{ 
    string[] users = Roles.GetUsersInRole(OldRoleName); 
    Roles.CreateRole(NewRoleName); 
    Roles.AddUsersToRole(users, NewRoleName); 
    Roles.RemoveUsersFromRole(users, OldRoleName); 
    Roles.DeleteRole(OldRoleName); 
} 

這將更改角色中所有用戶的角色名稱。

後續:角色,用於確保用戶只在系統中扮演他的角色,因此User.IsInRole(ROLE_NAME)將幫助您執行適用於BR的證券,對於用戶和他所扮演的角色如果您可以隨時更改角色名稱,您將如何驗證用戶是否真的擔任該角色。那是我所瞭解的,當我問到它的時候。

rtpHarry編輯:轉換後的僞代碼樣本編譯的C#方法

5

以編程方式重命名ASP.NET成員資格模型中的角色將是一件壞事™,因爲角色名稱在配置文件中用於定義權限。如果有編程方式來更改角色名稱(將更改持久保存到數據庫),那麼您可以立即中斷任何使用該數據庫的Web應用程序在web.config中的基於角色的安全配置,並且不會有任何方法以確保單個Web應用程序可以使用該成員資格數據庫來更改每個Web應用程序的配置。

+1

是真的,但我不打算使用配置文件,因爲我的用戶可以創建新角色,並且他們可以通過應用程序配置新角色訪問哪些頁面至。我需要添加一個運行時檢查,所以這個限制沒有必要 – juan 2008-11-12 02:36:07

相關問題