2012-03-04 57 views
1

比方說,我的系統是由兩個業務對象類型:項目用戶何處以及如何存儲用戶權限?

根據用戶的權限,他/她可以:

| 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做任何事情(即使規則存在)。


在另一方面,我知道我針對這一個太大的靈活性,但我拒絕接受沒有辦法實現這種功能。

所以,實際的問題:

  • 這是一個好主意?
  • 有沒有更好的制度?
  • 任何其他建議?
+0

參考:http://en.wikipedia.org/wiki/Access_control_list – 2012-03-04 19:08:36

回答

1

這些項目是什麼組成?數據庫,文件和文件夾,還是什麼?

這些項目是數據庫項目還是其他?

數據庫簡言之

CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; 


GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'; 
GRANT ALL PRIVILEGES ON project1.* TO 'user1'@'%'; 
GRANT ALL PRIVILEGES ON project2.* TO 'user2'@'%'; 

可選WITH GRANT OPTION;


如果這些項目包含文件和文件夾,那麼你應該使用文件系統權限。 你使用什麼操作系統和文件系統? Linux文件系統。

chgrp (change group) 
chown (change owner) 
+0

嗯,這是一個有趣的想法;以利用我正在使用的軟件中現有的ACL。項目只是一個設置列表:用戶首選項+項目類型+構建目標+登錄憑證(例如通過FTP/SSH等進行連接)。 – Christian 2012-03-05 07:31:11

+0

我會完全使用內置的憑據。 Mysql已經徹底測試過他們的安全系統,所以你不必這樣做。如果您希望通過安全審計而不會造成大量頭痛和不眠之夜,請使用內置ACL。如果您有關於內置ACL的問題,我可以回答一些問題。 – cybernard 2012-03-05 22:26:54

相關問題