2014-01-07 102 views
1

看完http://en.wikipedia.org/wiki/Role-based_access_control並看到人們建立授權/訪問控制的方式之後,我想到這個問題:「爲什麼我們在檢查用戶的角色時檢查他們是否被允許執行X而不是檢查他們的權限?基於角色的訪問控制(RBAC)關心權限或角色?

這是我的理解,用戶有角色,角色的權限,這是一個用戶都可以有權限(用戶無法明確地給它分配的權限,它通過使角色獲得其許可)

而且我認爲在處理添加用戶的請求時檢查諸如「AddUser」的權限是有意義的,但是在.Net庫中以及RBAC中的很多示例中,我們看到他們檢查角色。就像他們檢查用戶是否擔任管理員角色,而不是檢查他/她是否具有「添加用戶」權限。

爲什麼?對我來說,檢查權限更有意義。

有人可以在這裏照亮我嗎?

感謝

回答

2

你是正確的 - 在應用程序中,而不是權限檢查的作用是不是基於角色的訪問控制。 Spring安全和許多其他突出的訪問控制機制傳播這種安全反模式。爲了獲得正確的RBAC使用 - 在策略執行邏輯中執行權限檢查。

1

如果我們簡化RBAC系統,RBAC是一種基於組織用戶權限限制對「某些源或應用程序或應用程序某些功能」的訪問的方法。在這裏,限制可以通過多個權限進行,這些權限是由管理員創建的,用於限制訪問權限,這些權限共同表示一個角色,將分配給用戶。

你可能對你的情況:)

部分正確,但考慮複雜的應用程序,其中有200個權限,管理員需要定義幾組權限通過角色來代表特定的行爲,這將的情況下,創建一些複雜類型的自定義並重新爲用戶提供表單。

這裏可能需要通過'HasRole('SomeRole')'方法來檢查用戶的確切行爲。

所以,我的回答是,這兩種方法在RBAC中同樣重要。

1)調用hasPermission(「permissionName」)

2)HasRole(「ROLENAME」)

好的RBAC溶液應該提供這兩種方法。市場上有這樣的工具,你可以檢查它們。