[请益] 数据权限结构设计

楼主: 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