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

ThinkPHP RBAC官网的例子详解 推荐

2013-05-30 17:56 309 查看
一直想学习RBAC,又看了官网的例子,又百度,没找到合适的教程。所以就只能自己研究了,就拿官网的例子来说吧
think_access表
作用是看某个组是否有权限访问某个模块下的方法或者访问某个模块,这个表少一个pid字段,自己添加就可以了
think_node表,节点表
作用是把所有需要的模块,模块下的方法都添加进来管理,用这个也可以直接读取成后台的导航
name字段是模块,方法的名称,比如Index模块,index方法等,

pid,这个模块或者方法的父id,
level,级别,一般项目名是1,模块是2,方法是3
正常先添加项目名,pid为0,level为1,status肯定是1了

一般都有个默认的Index模块,Index模块下有默认的index方法,
所以,插入Index,pid为项目名的id,level为2,再插入index,pid为模块的id,level为3。
think_role为组的表
think_user(自己建的,可以用别的名称,记得在配置文件里改掉),用户表

think_role_user是用户表和组表的关联。

接下来,在Lib下新建IndexAction,PublicAction,CommonAction

然后复制官网RBAC例子里的Conf下的config.php中的内容到自己的项目里,
关于RBAC所有的配置
'USER_AUTH_ON' => true,
'USER_AUTH_TYPE'=> 2,// 默认认证类型 1 登录认证 2 实时认证
'USER_AUTH_KEY' => 'authId',// 用户认证SESSION标记
'ADMIN_AUTH_KEY'=> 'administrator',
'USER_AUTH_MODEL' => 'User',// 默认验证数据表模型,如果用户表名称不是User的话自己改
'AUTH_PWD_ENCODER' => 'md5',// 用户认证密码加密方式
'USER_AUTH_GATEWAY' => '/Public/login',// 默认认证网关
'NOT_AUTH_MODULE' => 'Public',// 默认无需认证模块
'REQUIRE_AUTH_MODULE' => '',// 默认需要认证模块
'NOT_AUTH_ACTION' => '',// 默认无需认证操作
'REQUIRE_AUTH_ACTION' => '',// 默认需要认证操作
'GUEST_AUTH_ON' => false, // 是否开启游客授权访问
'GUEST_AUTH_ID' => 0, // 游客的用户ID
'DB_LIKE_FIELDS' => 'title|remark',
'RBAC_ROLE_TABLE' => 'think_role',
'RBAC_USER_TABLE' => 'think_role_user',
'RBAC_ACCESS_TABLE' => 'think_access',
'RBAC_NODE_TABLE' => 'think_node',

然后在CommonAction中添加
function _initialize() {
import('@.ORG.Util.Cookie');
// 用户权限检查
if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {
import('@.ORG.Util.RBAC');
if (!RBAC::AccessDecision()) {
//检查认证识别号
if (!$_SESSION [C('USER_AUTH_KEY')]) {
//跳转到认证网关
redirect(PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 没有权限 抛出错误
if (C('RBAC_ERROR_PAGE')) {
// 定义权限错误页面
redirect(C('RBAC_ERROR_PAGE'));
} else {
if (C('GUEST_AUTH_ON')) {
$this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 提示错误信息
$this->error(L('_VALID_ACCESS_'));
}
}
}
这个的作用说白了就 检查是否有权限登录和是否有权限访问而已。
然后IndexAction继承CommonAction
默认没有登录或者没有权限会调转到Public/login,Public直接看官网的例子把~应该没问题。

最重要的是access表和node表,role表中的关系要弄清楚了,还有role,role_user,user表之间的关系。其实就这么简单。如果还有问题的话可以加群252799167,一起学习讨论,新手一个,呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  权限管理 ThinkPHP RBAC