比方說,我的系統是由兩個業務對象類型:項目和用戶。何處以及如何存儲用戶權限?
根據用戶的權限,他/她可以:
| Action | Role |
|-----------------|------------------|
| view projects | Clients |
| edit projects | Devs |
| manage projects | Managers |
| manage users | Administrators |
的問題是,客戶只能看到一些具體項目。項目既可以設置爲公開(每個人都可以看到它們),也可以設置爲對某些特定客戶可見。
同樣的,開發者,開發者可以可以編輯自己的,以及其他項目,由管理者設定。經理應該能夠創建和管理用戶/項目,除非管理員明確拒絕具體項目的經理能力。 管理員可以完全訪問管理系統上的任何內容,包括所有用戶和所有項目。
這幾乎是我想要實現的。 「怎麼樣」纔是讓我擔心的事情。
通常,對於角色,你會在你的用戶表中的「角色」欄,這將指定樣的角色的用戶。由於我們不會同時擁有開發人員的客戶端,所以本專欄不需要是位掩碼。
下一步將有一個規則系統來指定哪些用戶可以根據自己的角色訪問。這是不可能適應現有的表(沒有數組字段 - 這是有點骯髒),所以我想我會需要一個單獨的表。
這看起來像:
| user_id | access | object_type | object_id |
|---------|---------|-------------|-----------|
| 45 | allowed | user | 42 | user 45 can manage user 42
| 42 | denied | project | 30 | user 42 cannot do anything with
project 30
該表必須與用戶角色來使用。例如,如果用戶45是客戶端,他不能對用戶42做任何事情(即使規則存在)。
在另一方面,我知道我針對這一個太大的靈活性,但我拒絕接受沒有辦法實現這種功能。
所以,實際的問題:
- 這是一個好主意?
- 有沒有更好的制度?
- 任何其他建議?
參考:http://en.wikipedia.org/wiki/Access_control_list – 2012-03-04 19:08:36