伊莉討論區

標題: 請教一下關於權限功能&查表問題 [打印本頁]

作者: sss86523    時間: 2017-6-22 01:51 PM     標題: 請教一下關於權限功能&查表問題

本帖最後由 sss86523 於 2017-6-22 01:53 PM 編輯

我目前利用RBAC的權限實做,有一些問題。
權限功能基本的增修查刪沒問題,
目前希望達成一種功能,一個群組內有多名成員,其中可以設定某幾位為組長,其餘為組員,
組員與組長新增的資料,只有這個群組看得到,其他群組看不到,且組員只可編輯自己的資料,
不可動到組長的資料。

目前利用RBAC好像只能做到針對某個功能的動作。例如對物品的新增、刪除、審核等,
如果要做到上述的需求,有甚麼比較好的做法,或是要怎麼擴充RBAC。可以跟我講個方向嗎。這種功能有沒有甚麼專有名詞。
另外,後臺的物品清單列表如果只能出現自己群組的資料,
那在sql語句上的下法,我的想法是這樣

$userGroups = $_SESSION['groups']; //該登入使用者所在的群組(多個)

SELECT 某些欄位 FROM 物品清單
WHERE 創建者編號 IN (
        SELECT 使用者編號
        FROM 群組表
        WHERE 群組編號 IN ($userGroups)
)


另外,後臺的物品清單列表如果只能出現自己群組的資料,
那在sql語句上的下法,我的想法是這樣
想請問在做較複雜的權限功能時,這種功能都怎麼下sql。
因為這種物品清單,可能本身就有很多關連表了,或是很多查詢條件,
所以JOIN及WHERE子句很多,再加上這個感覺變得好亂,全部擠在一起。
而且感覺彈性不太好,如果哪天要讓某些固定的群組也可以查詢,
這樣又要改掉這串WHERE子句。有沒有更正統一點的做法。

謝謝!!



作者: danny543    時間: 2017-6-23 01:47 PM

正統一點的做法 ... 物件導向 @@
1.取得群組 2.取得使用者 3.檢查權限 這三件事會分開作 ...
不過感覺你跟我一樣不是物件導向信徒
不覺得你會喜歡那種作法
作者: sss86523    時間: 2017-6-23 06:17 PM

danny543 發表於 2017-6-23 01:47 PM
正統一點的做法 ... 物件導向 @@
1.取得群組 2.取得使用者 3.檢查權限 這三件事會分開作 ...
不過感覺你跟 ...

不對不對,我目前就是這樣做的。
都是分開的,但是當最後在查表時還是會將結果集合在一起。
上面的code只是說明!!

想問要如何完成上述較複雜的功能,
且讓程式碼可讀性更高。
作者: cswordli    時間: 2017-7-22 06:39 AM

以下資訊為小弟經驗分享:
1.為了追求效能我建議你把需要權限控管的那些TABLE(如:物品)都加上群組(你原本就有人員),未來要秀資料戓鎖資料時就直接用一個WHERE處理即可。例:A帳號有X,Y,Z三個群組,所以SAMPLE如下:
$userGroups = $_SESSION['groups']; //可能是 'X','Y','Z'
SELECT 某些欄位 FROM 物品清單
WHERE 群組 IN ( $userGroups )
2.依小弟多年program經驗,您提出的問題屬於系統分析的一環而非技術(OOP),此部份建議多看別人程式或努力問有經驗的人。因為有經驗的人才能依您實際上的多個需求(含硬體)來評估並做出較適當的解決做法,所以建議你要多觀摩一些做法並了解當中的差異才能找到最合適方法而非追求傳說中的正統做法。(例: 若你的系統最多10個人同時使用[1~10秒內],當然每次去做JOIN QUERY就沒差了;可是場景換成10000個人同時使用[1~10秒內]那每次去做JOIN QUERY就慢死了;你也可以多人數使用換成$$$,同理可推導相同結論)
作者: sss86523    時間: 2017-7-23 01:53 PM

cswordli 發表於 2017-7-22 06:39 AM
以下資訊為小弟經驗分享:
1.為了追求效能我建議你把需要權限控管的那些TABLE(如:物品)都加上群組(你原本就 ...

我大概懂了,謝謝您的分享~
作者: cswordli    時間: 2017-7-23 03:56 PM

sss86523 發表於 2017-7-23 01:53 PM
我大概懂了,謝謝您的分享~

不客氣,希望幫得上你!
有問題可再互相討論,教學相長~~~




歡迎光臨 伊莉討論區 (http://www93.eyny.com/) Powered by Discuz!