为什么YII的RBAC设计是用的name关联而不用ID来关联 [ 2.0 版本 ]
因为以前用的TP,现在用YIi ,发现他们在实现RBAC的时候大致原理是差不多的,但是在数据库结构上有点小小的区别,
父子权限与子权限TP用的是以ID关联:如:
parent child
1 0
1 2
而YII中他是直接用的name去关联
一般我在name字段都是存储的节点的形式,如:modules/controll/action
个人觉得用ID:这样管理的方便,一是存储数据少了,只是数字而已,对查询的SQL语句也会精简一些
如果用name:那将会存储很多很长的字符串
所以不知道YII这样做的初终是什么, 这样做有什么特别的好处吗?
因为个人觉得还是ID好,所以想将的的数据结构上扩展一下加一个Id字段,这样用ID去关联,可能RBAC的源码要进行修改才行!
有大神能讲讲他的利弊吗?给点建议有好!谢谢!
共 6 个回答
-
反正不要我去查询,底层怎么实现的就不太关心了。
共 2 条回复 -
一般我在name字段都是存储的节点的形式,如:modules/controll/action
Yii2 RBAC 表格内不是用来存储路由(route, 即你说的“节点”)的。路由的权限判断通过 ACF (Access Control Filter) 实现。
在做项目的时候不可能就用他原原本本的就能满足客户的一些需求,可以在他的源结构中扩展加一些字段……
你说的有道理,前提是你对 Yii2 RBAC 相关知识通读过,有一个整体的、大致的认识。当自己的需求不能实现时,大致有两种可能:一、某个知识点能解决需求,但是该知识点自己不知道;二、需求比较特殊,框架中提供的通用功能满足不了特殊的需求。解决办法是新建一个子类,在子类中进行个性化定制。
如:我有50个权限要检查 YIi会这样去查:
SELECT * FROM data00200 ***
你确定 Yii2 是这样查找的吗?还是 ThinkPHP 是这么查的,所以你觉得 Yii2 也是这么做的?我对 RBAC 了解有限,没有找到这里的出处。
我觉得你走进了一个误区:有意无意地,带着 ThinkPHP 已有的知识结构去理解 Yii2. 框架间的实现原理的确类似,数据结构也可能差别不大,但是实现思路上可能存在差别。
共 4 条回复
xjcallen 东莞
最后登录:2022-06-30
在线时长:6小时36分
- 粉丝0
- 金钱175
- 威望0
- 积分235