ThinkPHP 用RBAC::saveAccessList()方法了解RABC的四张表。
2013-10-31 14:03
253 查看
RBAC::saveAccessList() 中的查寻语句:
$sql = "select node.id,node.name from ".
C('RBAC_ROLE_TABLE')." as role,".
C('RBAC_USER_TABLE')." as user,".
C('RBAC_ACCESS_TABLE')." as access ,".
C('RBAC_NODE_TABLE')." as node ".
"where user.user_id='{$authId}' and user.role_id=role.id and ( access.role_id=role.id or (access.role_id=role.pid and role.pid!=0 ) ) and role.status=1 and access.node_id=node.id and node.level=1 and node.status=1";
这里要用到4张表,表名都是从配制文件中获得的,其中RBAC_USER_TABLE是role_user这张表。
RBAC::saveAccessList()这个方法有一个参数uid 默认是配制文件中 USER_AUTH_KEY 作为键名的SESSION数组值。
查找数据步骤:
1. 在role_user表中找出user_id = uid 的数据;
2. 在role表中找出 id 等于上一步role_user查询结果表中role_id的数据;
3. 在access表中找出 role_id 等于上一步role查询结果表中的role_id且role_status = true的数据。
4. 在node表中找出 id 等于上一步access查询结果表中的node_id的数据
5. 在node表中找出 上一步node查询结果表中node_status = true 的数据;
6. 取出node表中字段 id name level;
找完数据l 是后,组成一个三维数组,第一维是’应用‘, 第二维是‘控制器’, 第三维是‘操作’
leve等级,应用是1,控制器是2,操作是3
name 是节点名称,它和文件名,控制器名 操作名的英称相同。
那么,这些表中的关键字段也就出来了。
role_user :role_id user_id;
role :id status
access :node_id role_id
node :id name statue level
id 是自增的, status 默认是0(没有被锁定。)
流程图如下:
$sql = "select node.id,node.name from ".
C('RBAC_ROLE_TABLE')." as role,".
C('RBAC_USER_TABLE')." as user,".
C('RBAC_ACCESS_TABLE')." as access ,".
C('RBAC_NODE_TABLE')." as node ".
"where user.user_id='{$authId}' and user.role_id=role.id and ( access.role_id=role.id or (access.role_id=role.pid and role.pid!=0 ) ) and role.status=1 and access.node_id=node.id and node.level=1 and node.status=1";
这里要用到4张表,表名都是从配制文件中获得的,其中RBAC_USER_TABLE是role_user这张表。
RBAC::saveAccessList()这个方法有一个参数uid 默认是配制文件中 USER_AUTH_KEY 作为键名的SESSION数组值。
查找数据步骤:
1. 在role_user表中找出user_id = uid 的数据;
2. 在role表中找出 id 等于上一步role_user查询结果表中role_id的数据;
3. 在access表中找出 role_id 等于上一步role查询结果表中的role_id且role_status = true的数据。
4. 在node表中找出 id 等于上一步access查询结果表中的node_id的数据
5. 在node表中找出 上一步node查询结果表中node_status = true 的数据;
6. 取出node表中字段 id name level;
找完数据l 是后,组成一个三维数组,第一维是’应用‘, 第二维是‘控制器’, 第三维是‘操作’
leve等级,应用是1,控制器是2,操作是3
name 是节点名称,它和文件名,控制器名 操作名的英称相同。
那么,这些表中的关键字段也就出来了。
role_user :role_id user_id;
role :id status
access :node_id role_id
node :id name statue level
id 是自增的, status 默认是0(没有被锁定。)
流程图如下:
相关文章推荐
- THinkphp save方法 判断如果没有数据更新 报错问题
- thinkphp中save方法更新的值和原来的值一样的时候返回false
- 【学习笔记】thinkPHP的RBAC的基本用方法
- thinkphp的save方法失败
- ThinkPHP分组模式下使用RBAC的方法
- ThinkPHP5.0更改框架的验证方法:对象->validate(true)->save();
- 如何用ThinkPHP的Save方法,保存未被修改的数值
- 【PHP】【Mysql】【thinkphp】,Thinkphp save()方法执行update操作的返回值问题
- thinkphp 修改后的数据和原数据一样,save方法返回值
- ThinkPHP 更新数据 save方法
- 在使用ThinkPHP时候数据更新的时候,save()方法返回值为0的问题!!!!
- ThinkPHP save()方法失效的几种可能情况
- Thinkphp Save方法更新问题
- ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
- ThinkPHP函数详解:I方法
- Java技术——你真的了解String类的intern()方法吗
- thinkphp中表有前缀名的时候申明模板的方法
- thinkPHP线上自动加载异常与修复方法实例分析
- thinkphp3.2 U方法 使用与注意事项
- ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法