ThinkPHP 用RBAC::saveAccessList()方法了解RABC的四张表。

  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(没有被锁定。)

流程图如下:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值