[請益] 數據權限結構設計

作者: Nancy010006 (Nancy)   2019-09-27 17:55:02
目前正在使用laravel實作一個類似校園系統的東西
但是在設計權限上發現遇到了一個有點問題的部分
研究了一下權限大致可分為功能權限和數據權限
目前功能權限的部分是使用laravel-permission這個套件,很方便有弄出來
但在數據權限的部分遇到了蠻大的障礙,例如說校長可以管理班級,並指派班級老師
老師可以看到被指派的班級資料,校長可以看到所有的班級資料,但可能也會有行政老師

行政老師可以在沒有被指派班級的情況下看到所有的班級資料,
如果是只針對"班級"這件事這麼做
可以硬是開表寫出來沒問題,但是因為目前做的東西是希望可以模組化的,
可能會有校長又可以管理社團,並指派社團老師,然後又有行政人員....等等
會有很多種同樣的情況,
所以不希望對班級就開一張班級的權限表,
這個時候想要處理誰可以看到資料的這個數據權限應該要怎麼設計或是有什麼思考、查詢
的方向
查到的英文文件幾乎都沒什麼資料,可能是我關鍵字不會下,找到的幾乎都是檔案權限問

目前覺得這篇看起來可能有用
https://www.cnblogs.com/jhcelue/p/6759269.html
但是說明其實很少,也沒什麼討論的資料,所以覺得有點遇到障礙
作者: MoMoShota (正太控)   2019-09-29 16:52:00
聽起來你要的是 RBAClaravel-permission 這一套是用 morph 實現的建議先看看 Eloqent 多態關連 Polymorphic Relations瞭解多態關連之後,會比較知道那個套件是如何實現 RBAC另外補一個,casbin 是我認為很有潛力的認證框架
作者: Nancy010006 (Nancy)   2019-09-30 09:28:00
感謝分享,但是我以為RBAC是基於角色的權限控制,我現在想要的是更細的數據權限 譬如說兩個不同的角色,校長跟一般老師,他們都可以執行查看班級資料這個功能,但是能查看的範圍不同,校長可以看到全校的資料,而老師只能看到自己負責的 班級資料,這似乎不是純RBAC可以解決的?
作者: DongFeng   2019-09-30 20:41:00
可以考慮創建另一種角色實體,來控制可存取的班級與社團然後在使用者資料上加入 functional_role_id & accessible_role_id 來控制使用者可存取的方法與範圍
作者: MoMoShota (正太控)   2019-10-01 01:31:00
我個人是建議從大的做往小的「校長」是一個角色,「教師」是一個角色他們都具備「查閱班級資訊」的權限然後還有一個權限叫做「檢視非所屬班級」只有校長具備也就是說在點入「查閱班級資訊」時,會先確認:1. 是否可以查閱班級資訊2. 該班級是否為自己所屬因為你在文中提到有多個角色,所以直覺上會想到 RBAC至於權限要設計哪些,或是他們有什麼規則都要想清楚
作者: Nancy010006 (Nancy)   2019-10-01 11:49:00
感謝DongFeng大的建議,但這個描述對我來說還有點模糊,我再想想看是否可以套用MoMoShota大這個方式跟我目前能想到的最佳解有點類似,因為要拆分功能模組,可能在「社團管理」功能中,行政老師可以查看全校班級資料,但在「成績管理」功能中,行政老師只能看到其管理的班級資料,所以我目前想到的做法是在各個會用到查詢班級資料的模組中,都各別多一個叫做`查看全校資料`權限,不知道這樣的設計是否會過於冗長
作者: higoodman (方方黃黃)   2019-10-09 16:16:00
校長不會做你說的那些事
作者: Nancy010006 (Nancy)   2019-10-10 08:20:00
假設啦只是一個比喻哈哈

Links booklink

Contact Us: admin [ a t ] ucptt.com