2009-10-06 53 views
2

我正在處理這個項目,管理員用戶可以創建一些用戶的組,這些用戶組將作爲項目角色工作。Asp.net MVC - 如何在不知道這些角色的情況下獲取用戶角色?

因此,管理員將創建一個名爲「SuperAdmin」的用戶組,並將在下拉列表中選擇將成爲該組的一部分的用戶。

我之前在溶液中使用RoleProvider和使用控制器的Attibutes,但在這種場合,我創建的所有組中控制器的工作和手動設置,如:上面我知道

[Access(Roles = "SuperAdmin")] 
public UserController : Controller 
{ 
} 

在這個例子中該組被命名爲「SuperAdmin」。但是,現在,在這個新項目中,我不知道管理員用戶將創建什麼組。

那麼我怎樣才能獲得允許用戶動態訪問的所有角色?

謝謝!

回答

4

如果我正確理解你的問題,你想軟編碼值「SuperAdmin」。

我遇到了類似的問題,因爲我想驗證用戶是否有權訪問某個資源(稱之爲文檔),但該資源的ID在應用程序開發過程中是未知的。我通過創建自己的基於表的安全性並將其核心邏輯放入我的模型(實際上是業務邏輯層)來解決此問題。這使我能夠安全地修剪數據庫中的數據,並在用戶請求無權訪問的資源時重定向用戶。

如果您仍然希望使用屬性來完成此操作,您可以創建一個自定義屬性(對ASP.NET MVC使用的屬性進行建模),並從數據庫中查找適當的權限並做出決定。

或者,你可以這樣做是正確的控制器方法中,使用這樣的事情:

Public ActionResult EditThing(int ID) 
{ 
    ThingRepository repository = new ThingRepository(); 

    If (!repository.UserHasAccess(int ID)) 
     Return View("NotAuthorized") 
    // 
    // Do stuff here 
} 

NerdDinner tutorial,如果你需要的資源庫的更多信息。

此處瞭解詳情:Document-Based Security in ASP.NET MVC

+0

@AndreMiranda - Admin如何將角色分配給角色?即什麼使動態創建的SuperAdmin角色特別?某處需要存儲角色到權限的映射 - 無論是編輯頁面,發佈表單還是訪問頁面,如何讓管理員定義這些頁面? – 2009-10-06 22:04:38

1

你有沒有考慮寫自己的屬性,你可以裝飾你的行動?

在這種情況下,您可以使用該屬性獲取用戶的訪問權限,將其與針對頁面訪問表的匹配,然後返回結果並允許或拒絕訪問頁面/操作。

我認爲你需要一個表格來決定角色有權訪問哪個頁面,哪些頁面可以交叉引用用戶分配的角色。

或者你可以用這樣的方式編寫你的屬性,以便它指定允許看到頁面的角色。

[MyAccessAttribute(Allow="SuperUser", "Admin")] 
public ActionResult MyAction() 

這是否有幫助/有意義?

相關問題