目前,我們正在一個角色設計一個用戶角色和權限系統在我們的Web應用程序(ASP.NET),它似乎是我們有幾個案件那不適合在經典基於角色的訪問控制(RBAC)。我會發布幾個問題,每個問題都專注於一個特定的案例。這是我的第二個問題(第一個問題在這裏:Non RBAC User Roles and Permissions System: checking the user's City)。非RBAC用戶角色和權限系統:與性能
我們有以下情況:我們需要在我們的Web應用程序中實施經理角色。但是,經理可以屬於一個或多個公司(在我們正在爲其創建此Web應用程序的一大組公司內)。說,可以有「公司A和B的經理」,「公司C的經理」等。
根據經理所屬的公司,他有訪問某些操作:例如,他可以只與他所屬公司的客戶溝通。也就是說,「公司A和公司B的經理」只能與公司A和公司B的客戶進行聯繫,而不能與公司C的客戶進行聯繫。他還可以查看公司A和B的客戶詳細信息頁,而不是C等。
看來這種情況屬於RBAC。但是,情況並非如此。我們需要創建一個ManagerRole類,將有一個公司財產 - 也就是說,這會不會只是一個作爲權限(如在古典RBAC)的集合作用,但隨着性能一個作用!
這只是具有屬性的角色的一個示例。還會有其他的:例如,一個管理員角色,這也將屬於一些公司,也將具有其他自定義屬性。
這意味着我們將層級或角色類:
class Role – base class
class ManagerRole : Role
List Companies
class AdministratorRole : Role
List Companies
Other properties
我們研究了純RBAC及其在幾個系統實施,並沒有發現系統設有層級或角色,每個都具有自定義屬性。在RBAC中,角色只是權限的集合。
我們可以使用權限對屬性(如ManagerPermission,AdministratorPermission)進行建模,但這有很多缺點,主要是我們無法分配角色,如「公司A和B的經理「,但必須創建一個包含A公司和B公司的ManagerPermission的角色......此外,」經理「似乎更像是一個」角色「(在公司中的職位),而不是來自語言學的觀點。
對於這個主題的任何想法以及此領域的任何經驗,都不勝感激!
謝謝。
類似IsUserInRole(「manager-companyA」)的代碼根本不漂亮。我們希望擁有像IsUserInRole(「manager」,companiesList)這樣的代碼。此外,角色的這些屬性的數量可能很大,像「manager-companyA,companyB ...」這樣的字符串可能會變得太長。 我認爲我們可以通過自己創建我們自己的權限和角色系統,而不使用ASP.NET角色來做得更好。我真的沒有看到任何麻煩。 – 2010-05-16 11:02:41
@micha - 你可能誤解了我寫的一些內容。也許審查可能會將其清除。並且設計,實施,測試和維護了幾個定製的提供商堆棧,併爲浪費的時間,金錢和睡眠感到後悔,我只能祝你好運。 – 2010-05-16 11:30:48
@code詩人。我不能同意重新創造輪子的謬論。但有時輪子不適合。一本很好的書是'\t \t 專業ASP.NET 2.0安全性,成員和角色管理' 它痛苦詳細地描述每個事情如何滴答。 – ggonsalv 2010-05-20 03:30:16