您的位置:首页 > 编程语言 > PHP开发

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

流程图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: