2011-08-02 85 views
7

我使用標準的.NET認證數據庫表和代碼的角色,與.NET 4.0,C#和MVC 3權限在.NET

基本上,我想有角色(包括在框架),然後就可以爲這些角色分配權限(據我所知,這些角色不包括在內)。

所以我想給角色分配權限。會計角色中的用戶無法編輯和刪除員工,但具有管理員角色的用戶可以。由於這些權限可能會隨時更改,而不是檢查User.IsInRole("Administrator"),所以我想要執行類似User.HasPermission("EditEmployee")的操作。

我大概可以設計一些自定義表格並自己編寫代碼,但如果它已經內置,我寧願使用.NET Framework。有沒有這樣的事情?如果沒有,那裏有一個圖書館做到這一點?

+0

可能重複(http://stackoverflow.com/questions/862904/asp-net-security-roles-and-permissions) –

+0

@djacobson - 是的,我看到那個帖子。但它在2年前發佈了,所以我不知道.NET 4.0是否包含此功能,或者如果第三方將此功能作爲庫開發的話。 – Steven

+0

看到這篇文章一次http://stackoverflow.com/questions/3298203/how-to-best-handle-permissions-not-roles-in-asp-net-membership-specifically-in – Rahul

回答

1

也許您可以簡單地將其他角色添加到可以編輯員工的用戶。像「CanEditEmployee」,然後驗證用戶是否在角色「CanEditEmployee」?當我必須做類似的事情時,這就是我所做的。

+0

也許這應該是要走的路線。我試圖模仿我見過的現有角色/權限提供者,但它可能太複雜了。最終,角色只是權限的集合。我想我將使用.NET角色表作爲「權限」,然後爲了顯示目的,我將爲「角色」創建一個自定義表格,這將與多個權限相關。 Yup! – Steven

+0

就像扎克瑞解釋得比我更好一樣,根據我的觀點,他所做的是更好的方式來做到這一點。至少最簡單。 –

1

通常,當我想要做這樣的事情時,我使用下劃線符號「_」創建子角色,將子角色提供的附加權限/功能分割。

例子:

管理員 Administrator_EditEmployee Administrator_EnableTasks 等等

然後我分析我的管理頁面的名字,所以我得到一個很好的格式化嵌套的樹狀/下拉列表,然後我分配到各種用戶。這樣,您可以繼續使用內置的安全系統,而無需在管理頁面中添加任何特殊的分析邏輯。

2

內置的RoleProvider實際上並沒有提供一個乾淨的方式來做到這一點。真正實現RoleProvider的唯一方法是創建像「Employees_CanEdit」和「Employees_CanAdd」等角色,但最終會出現大量的角色。

雖然有其他方法可以讓您的角色具有權限。您可以創建一個鏈接用戶,角色(「員工」)和權限(「添加」或「編輯」)的表格。然後,你可以實現類似:

public bool HasPermission(string role, string permission) { 
    // Some sql for accessing the table 
    // return true if a row exists that matches the user, the role, and the permission 
} 
[ASP.NET安全角色和權限]的