有兩張表規則表和組表:
tb_rules
,
tb_group
這是auth
許可權中的兩張表,明顯他們是多對多的關係,一個規則可以屬於多個組,一個組可以擁有多個規則;
按道理說應該有一張關聯表tb_group_rules(group_id,rule_id)
但是thinkPHP
的auth
類裡面不用關聯表,是這樣的tb_group
裡面有一個rules
欄位,儲存'1,2,3,4,5,6,7,8,9'
這樣的規則id
;
我猜想他不用關聯表可能有這幾個考慮:
1:一般每個組的規則並不多,用一個欄位比較管理方便,不必要建一個關聯表造成資源的浪費
2:一般都是取得組的規則id
,授權時直接更改組的規則欄位
但是我覺得這樣時候總不好:
1:什麼叫一般組的規則不多,什麼叫一般,這個誰說的准呢,反正我就是不放心
2:將規則用,分割好嗎,如果要是想取消某一個規則,這樣極為不方便(程式只能查出規則欄位用,分割再取出,在拼接,在儲存),給維護帶來麻煩
3:通過組來更改規則是方便,但如果我想根據規則看它屬於那些組時,或者根據規則為它授權某些組時就比較麻煩了
如果使用關聯表,上面都不是問題,也利於程式的維護
上面就是我的理解和利弊的分析,如有不對請大神指正
我探討的問題,如題,到底什麼時候使用關聯表,以及利弊的權衡,比如此案列中的情況。
回複內容:
有兩張表規則表和組表:tb_rules
,tb_group
這是auth
許可權中的兩張表,明顯他們是多對多的關係,一個規則可以屬於多個組,一個組可以擁有多個規則;
按道理說應該有一張關聯表tb_group_rules(group_id,rule_id)
但是thinkPHP
的auth
類裡面不用關聯表,是這樣的tb_group
裡面有一個rules
欄位,儲存'1,2,3,4,5,6,7,8,9'
這樣的規則id
;
我猜想他不用關聯表可能有這幾個考慮:
1:一般每個組的規則並不多,用一個欄位比較管理方便,不必要建一個關聯表造成資源的浪費
2:一般都是取得組的規則id
,授權時直接更改組的規則欄位
但是我覺得這樣時候總不好:
1:什麼叫一般組的規則不多,什麼叫一般,這個誰說的准呢,反正我就是不放心
2:將規則用,分割好嗎,如果要是想取消某一個規則,這樣極為不方便(程式只能查出規則欄位用,分割再取出,在拼接,在儲存),給維護帶來麻煩
3:通過組來更改規則是方便,但如果我想根據規則看它屬於那些組時,或者根據規則為它授權某些組時就比較麻煩了
如果使用關聯表,上面都不是問題,也利於程式的維護
上面就是我的理解和利弊的分析,如有不對請大神指正
我探討的問題,如題,到底什麼時候使用關聯表,以及利弊的權衡,比如此案列中的情況。
對應你覺得這樣時候總不好的三點說明,我進行回複個人觀點,(因為您的問題,公說公有理婆說婆有理)。
1、一般,你自己猜想了一般情況,而又是你自己否定這個一般情況,那麼這是你自己的問題了。
2、分割,如果rules欄位現在儲存的是‘1,2,3,4,5,6,7,8,9’,那麼在管理介面進行刪除2號角色的時候,不是對現有儲存的rules欄位值進行分割,剔除2,在組合。而是在管理介面刪除後點擊儲存,表單重新提交組所擁有的角色資訊進行組合拼接,然後update儲存rules欄位資訊。而並不是你所描述的情況:“分割再取出,在拼接,在儲存”,這的確給維護帶來麻煩,但是實際做法不該是描述的這樣子。
3、“但如果我想根據規則看它屬於那些組時”,這應該是你業務需要,thinkPHP在設計的時候並未直接考慮這點。