2012-11-18 21 views
1

我有以下表結構:涉及複雜的用戶權限一個表

Entity 
--------------------- 
id | name 

Users 
--------------------- 
id | name | password 

UserGroups 
--------------------- 
id | parent_id | name 

Users_UserGroups 
--------------------- 
user_id | user_group_id 

Roles 
--------------------- 
id | parent_id | name 

Users_Roles 
-------------------- 
user_id | role_id 

而且主要目標是用下列條件創造Entity行級訪問限制:

1)用戶創建Entity - 他可以看到它(他是老闆)
2)用戶組成員可以看到它太(但如果定義一樣 - 看不到 - 這將是用戶私有的)。因此,記錄可以是用戶或組私人或公共 - 都可以看到記錄。例如,用戶在銷售團隊A中,並且有記錄可以查看所有組成員,但是可以有一個或多個記錄,哪些只能看到用戶 - 可能是潛在客戶。
3)例如,用戶A的角色是salesman,此角色是父角色sales managers的子角色。然後用戶是sales manager角色可以看到用戶A的實體。角色的層次結構。老闆可以看到什麼是做他的直接僱員:)
4)將有profile表過,這裏的個人資料可以被添加到角色,如果需要,用戶也。

主要問題是如何將用戶/組/角色/配置文件與實體關聯?以及如何定義權限?我的想法是創建列'user_id'到Entity。當查詢Entity記錄時,找到用戶,看到哪個角色,組,配置文件是用戶等。但我認爲它太複雜了,也許可以有更簡單的方法,沒有很多額外的表格。我的意見是感激:)

回答

1

的標準模式是定義本金任何你可以分配權限。然後用戶,用戶組和角色都是委託人的例子。一種實現方法是使用principal_id作爲主鍵的主表,然後通過user_id通過user_id將角色表與user_group_id的角色表相關聯,並通過user_group_id將角色表與角色表相關聯。

那麼你就必須對實體entity_owner_principal_id列,並與ENTITY_ID的entity_permissions表,principal_id。您可以在此表中添加「讀取」,「刪除」,「更新」等列,或者更靈活一些。

您可能還需要考慮是否有組和角色之間的真正區別,他們是用戶進行分組的兩種方式,你似乎有層次結構都太。

+0

這會是這樣的[這](http://storenow.net/my/?f=5629)1)做什麼用的'entity_owner_principal_id' - ?我認爲這是entity_permission_id與否? 2)如何正確命名'Principal'表? 3)分析和複雜查詢(它是大型項目的一小部分)會快嗎?謝謝! – Orbitum

+0

類似的東西,但如果你的工具可以顯示1-1關係,那將是一件好事。我對這些模塊不太確定,但我不認爲這個問題是關於這個問題的。 – Laurence

+0

我更新了以前的評論 - 有一些問題。何處放置1對1關係船? – Orbitum