2014-11-05 82 views
1

這是我第一次使用Yii2的RBAC系統。 我用http://www.yiiframework.com/doc-2.0/guide-security-authorization.html來讓自己熟悉主題。 因爲我需要某種角色/權限管理,我安裝了這個擴展:https://github.com/mdmsoft/yii2-adminCan Yii2 RBAC權限有多個規則?

我正在處理讓用戶提交文章的應用程序。有兩種類型的用戶,管理員和普通用戶。

我爲此創建了2個角色。管理員角色和用戶角色。

用戶(管理員和用戶)必須能夠編輯文章。管理員應該可以編輯任何文章,而用戶只能編輯他們自己的文章。

爲此,我創建了2個權限。 「編輯」權限和「EditOwn」權限。比我創建「IsOwner」規則,並將其附加到「EditOwn」權限。

我爲Admin角色分配了「編輯」權限,爲用戶角色分配了「EditOwn」權限,一切都很好。

現在我想爲每篇文章創建「鎖定」狀態。如果文章被鎖定,即使是他自己的文章,用戶也不能編輯它。即使鎖定,管理員也應該可以對其進行編輯。

爲此,我創建了新規則「IsLocked」,但我不知道如何將其添加到「EditOwn」權限。我不知道是否有可能將2個規則附加到一個許可中?

編輯: 現在,我有這樣的方式「處理」,我有更多的權限「EditOwnIsLocked」給我附「IsLocked」規則比「EditOwn」,兒童是編輯的」孩子」。 這個工程,但它感覺骯髒,簡單和簡單的錯誤。

+1

在數據庫中處理'lock'不是更好嗎?我的意思是一個布爾列,指示文章是否被鎖定? – 2014-11-05 14:51:54

+0

我確實有。而且我希望通過檢查數據庫來檢查文章是否被鎖定,而不是拒絕用戶並允許管理員進行「角色」檢查。 – Ljudotina 2014-11-05 15:39:44

+0

你的意思是,與角色定義無關。您可以檢查訪問權限,但無法檢查文章是否被鎖定。你想如何知道這個角色? – 2014-11-05 15:48:58

回答

1

事實證明,現在(現在)沒有辦法將多個規則附加到權限。

您可以通過創建額外的權限並附加規則來處理需要多條規則的方式,並且可以通過父級連接或者編輯規則來檢查所有情況(在我的情況下檢查IsParent和IsLocked)。

這些解決方案並不完美,但現在就是這樣。第一個解決方案會產生不必要的權限,並且混亂您的權限列表(以防您使用yii2-admin或類似的擴展名),但保持您的規則清潔,第二種解決方案保持您的權限列表清晰,但是使您可以在多個規則中重新輸入相同的代碼有點OOP代表什麼Oos。