這個問題確實適用於任何可以爲單個用戶分配多個角色的網站或企業系統。在ASP.NET網站中,管理員應該分配多個角色嗎?
在ASP.NET身份您有IdentityUser
和IdentityRole
,其中用戶可以有0個或更多角色。控制器動作,然後由[Authorize(Roles = "roleName")]
保護鑑於有以下3個簡單角色,一個簡單的概念系統:
Administrator
Manager
User
...誰應該獲得所有控制器操作的簡單管理型用戶:
JoeAdmin
和下面的示例Web API控制器:
public IHttpActionResult GetForUsersAndAbove()
{
//
}
public IHttpActionResult GetForAdminsOnly()
{
//
}
如果系統被設計成:
- JoeAdmin分配只是一個角色 - 管理員,或者
- JoeAdmin分配給管理員,經理和用戶?
我問這個問題的動機是授權控制器操作。如果JoeAdmin只分配管理員角色,然後根據下面的授權屬性,他將無法訪問GetForUsersAndAbove()
因爲他不是用戶角色
[Authorize(Roles = "User")]
public IHttpActionResult GetForUsersAndAbove()
...
[Authorize(Roles = "Administrator")]
public IHttpActionResult GetForAdminsOnly()
...
那麼接下來的問題是一個成員,應該GetForUsersAndAbove()
是裝飾着
[Authorize(Roles = "User, Manager, Administrator")]
讓他可以訪問它嗎? OR
是應系統分配JoeAdmin基本上所有角色的,這樣他就可以訪問所有的控制方法,即使它們被打上[Authorize(Roles = "User")]
?
編輯
如果我用下面的約定控制器操作
[Authorize(Roles = "User")]
public IHttpActionResult GetForUsers()
並預計,如果JoeAdmin要訪問此方法,他也應該是User
角色的成員,這導致用戶管理屏幕上的用戶界面問題:
以下是一個場景:由於管理用戶的責任,您是系統的新用戶。您添加一個新用戶JaneAdmin
意圖使她可以完全/不受限制地訪問系統。您會看到3個複選框:Administrator
,Manager
和User
。沒有文檔來指導你,你勾選了哪個複選框?如果我把自己放在用戶的鞋子裏,我會直覺地打勾「管理員」,期望它能提供完整的訪問權限。我也可以想象JaneAdmin發現她被鎖定在簡單的用戶級操作之外時的挫折感。所以用戶界面要求所有3個複選框都應該打勾......以滿足系統的授權方面,但是會導致用戶體驗不佳。
那麼,人們通常如何處理這個問題?
感謝。你的第二點意義重大。根據您的建議,請在問題中查看我的編輯。 – BCA
@BCA查看我的更新 – trailmax
我從來沒有想到這是可能的 - 謝謝 – BCA