Thinkphp Rbac不完全深入详解一

说到thinkphp rbac就得先说一下rbac, 那么什么是rbac?  rbac即(role based access control)就是基于角色的访问控制的意思。那么什么是基于角色的访问控制?还是跟上面一样,要想知道什么是基于角色的访问控制首先就得来理解什么是角色,那么,什么是角色? 角色,它是一种代称,可以代指某一种或者多种可视和非可视规则和不规则物,简单举例来说,我在家是儿子,而这个儿子就可以称为是一种角色,因为此时角色属于儿子,所以我便可以行使一些儿子可以拥有的权限,假如这个时候我8岁的话,便可以让长辈代替我穿衣,或者喂我吃饭。而这个儿子只是我拥有角色之一,我可以同时拥有多种角色,而每一种角色会拥有若干权限,我可以根据不同的角色限制不同的用户访问,而这个限制的行为就叫做基于角色的访问控制。

看到这里,想必什么是rbac你已经理解了,那么thinkphp rbac就很好理解了, 它就是thinphp个性化处理后的rbac, 就是rbac的定制版的意思, 我可以使用thinkphp这个框架,调用它集成的个性化处理后的rbac功能来实现基于角色的访问控制。

Rbac的认证流程

判断当前模块的当前操作是否需要认证,如果需要认证未认证就跳转到认证网关通过身份委托获取用户决策访问列表,如果不需要认证或者当前已认证就判断是否有访问权限。

Rbac的不详细原理

首先通过saveaccesslist保存当前用户权限信息, 这里其实就是以下面的格式存储在session中的。

$_SESSION[APPNAME][CONTROLLERNAME][ACTIONNAME];

如果当前模块的当前操作已定义,就代表该controller拥有执行actionname动作的权限,比如

http://localhost/index.php/Admin/edit

就代表当前登录的用户具备执行admin模块的edit动作的权限。

说了流程和原理, 下面来讲一下具体的配置, 我们知道,无论是做网站还是给网站增加新功能, 都是需要对数据库表进行增删改查的, 所以这个时候, 就要对rbac功能进行数据库表结构设计,我们此次需要的表有以下几个

tp_user 账户信息表 //其实可以再分一个管理员表的, 这里可以把管理员表和注册用户表放到一起, 用id隔开, 比如uid 0 即admin。

tp_node 节点权限信息表 //这里放的是各个节点的权限信息,相当于介绍。

tp_role  账户角色信息表 //这里存的是账户角色信息,比如id为1的为管理员,它的uid为0。

tp_role_user 账户角色分配表 //给具体的账户分配角色用的,关联user表和role表。

tp_access 权限分配表 // 为具体的角色分配具体的节点权限。

到此我们便设计好了表信息, 大概来说一下归属, 首先user表和role表进行关联, 为具体id指定具体角色, 再然后role_user表和user表role表进行关联, 指定具体角色权限,再然后access表和role_user表进行关联, 如果role_id为1, 就说明这个时候登陆的是超级管理员,这个时候应该获取节点为1的权限。

到此,我们就大概明白了rbac的表设计, 因为我们需要使用thinkphp内置的功能,所以需要配置一些信息来读取修改具体所属的权限和属性信息, 下面就来看一下config里都需要哪些所需要配置的信息

因为thinkphp把这些信息是以数组的形式在value里保存的, 所以这个时候我们只需要修改键然后return就可以了, 键大致有以下几个

User_Auth_On=>true //false为关闭认证

User_Auth_Type=>1 //1为登陆认证,2为强制认证

User_Auth_Key=>sessionid //认证session标记

Admin_Auth_Key=>administrator //认证管理员名

User_Auth_Gateway=>’public/login’ //认证网关

User_Auth_Model=>’User’ //认证表模型

REQUIRE_Auth_Module=>” //需要认证的模块

Not_Auth_Module=>” //不需要认证的模块

Auth_PWD_ENCODER=>’md5′ //认证密码加密方式

GUEST_Auth_On=>false //是否开启游客授权访问

GUEST_Auth_ID=>0 //游客访问id

RBAC_USER_TABLE=>” //认证用户表

RBAC_NODE_TABLE=>” //节点表

RBAC_ROLE_TABLE=>” //角色表

RBAC_ACCESS_TABLE=>” //权限分配表

有人可能觉得哇塞这么多, 这个怎么记, 其实不用刻意去记的, 如果真忘了, 可以去rbac.class.php的注释里看, 到此, 前期准备就差不多了,当我们在config里文件把这个配置弄好以后, 下面就可以进行使用了

使用见下篇

此条目发表在php, thinkphp分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

Thinkphp Rbac不完全深入详解一》有 2 条评论

  1. 跨省少年说:

    使用见下篇 这里应该贴个链接的吗?

评论功能已关闭。