[英]user roles and permission in mvc
我有一個mvc應用程序,我有不同的使用角色,角色用戶有不同的功能(例如:添加,編輯,刪除, - ),每個角色中的用戶將具有此角色的此功能的子集。 我想授予每個用戶基於此權限查看頁面的權限。
在mvc中實現這一目標的最佳方法是什么?
謝謝
在我們的應用程序中,我們有角色,每個角色都有許多功能。 我們的目標是使用盡可能少的數據庫訪問來控制功能級別的訪問而不是角色級別。
這是我們做的:
1)在登錄時,我們創建一個UserCredentials對象,其中包含用戶有權訪問的所有功能(基於其角色)。 它是用戶可以訪問的所有角色中包含的所有功能的“不同”。 然后我們將此UserCredentials存儲在會話中。
2)為了限制對控制器或操作的訪問,我們實現了一個繼承AuthorizeAttribute的屬性,我們使用如下:
[Secure(Functionalities="Xyz.View,Xyz.Save")]
public ActionResult SomeAction(...){ ... }
請注意,沒有數據庫調用,我們所做的就是檢查“Xyz.View”是否存在於UserCredentials中的功能列表中。
3)有時我們需要從操作內部訪問憑證,因此我們創建了另一個ActionFilter(全局),如果找到名為“credentials”的參數,它將為您注入動作參數中的憑據,例如:
public ActionResult SomeAction(UserCredentials credentials, int otherParameters)
{
// "credentials" is populated by the global action filter
}
您可以使用它根據用戶角色或功能顯示不同的視圖。
4)另一種情況是我們需要根據用戶角色或功能隱藏部分視圖。 為此,我們創建了一個具有UserCredentials屬性的BaseViewModel。 此屬性還由另一個在執行操作后運行的全局ActionFilter填充。 如果模型繼承BaseViewModel,則過濾器將填充UserCredentials屬性。 我們可以這樣做:
@if(Model.UserCredentials.IsInRole("X")){
<div>Some content</div>
}
要么
@if(Model.UserCredentials.HasAccessTo("Xyz.Save")){
<button>Save</button>
}
我希望它有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.