首页 > 作文

thinkPHP3.2使用RBAC实现权限管理的实现

更新时间:2023-04-07 16:03:57 阅读: 评论:0

在thinkphp3.2中自己集成了rbac来实现权限管理,rbac实现类在项目中地址为:thinkphp/librar/org/util/rbac.class.php,其中集成了我们所需的权限管理操作

一:表设计

在thinkphp的rbac的的rbac.class.php文件中一共提供了4张表,还有一张用户表需要你自己去建

如下是我所建的和权限相关的sql

其中的wj_为表前缀,改成你项目中的表前缀

1:权限表:

create table if not exists `wj_access` ( `role_id` smallint(6) unsigned not null comment '角色id', `node_id` smallint(6) unsigned not null comment '节点id', `level` tinyint(1) not null comment '深度', `module` varchar(50) default null comment '模块', key `groupid` (`role_id`), key `nodeid` (`node_id`)) engine=myisam default chart=utf8 comment='权限表';

2:节点表:

create table if not exists `wj_node` ( `id` smallint(6) unsigned not null auto_increment comment '节点id', `name` varchar(20) not null comment '节点名称', `title` varchar(50) default null comment '节点标题', `status` tinyint(1) default '0' comment '状态 0禁用 1启用', `remark` varchar(255) default null comment '描述', `sort` smallint(6) unsigned default null comment '排序', `pid` smallint(6) unsigned not null comment '父级节点', `level` tinyint(1) unsigned not null comment '深度', primary key (`id`), key `level` (`level`), key `pid` (`pid`), key `status` (`status`), key `name` (`name`)) engine=myisam default chart=utf8 comment='节点表';

3:用户角色表:

create table if not exists `wj_role` ( `id` smallint(6) unsigned not null auto_increment comment '角色id', `name` varchar(20) not null comment '角色名称', `pid` smallint(6) default null '父级id', `status` tinyint(1) unsigned default null comment '状态 0禁用 1启用', `remark` varchar(255) default null comment '备注', primary key (`id`), key `pid` (`pid`), key `status` (`status`)) engine=myisam default chart=utf8 comment='用户角色表';

4:用户角色关联表:

c分苹果reate table if not exists `wj_role_ur` ( `role_id` mediumint(9) unsigned default null comment '角色id', `ur_id` char(32) default null comment '用户id', key `group_id` (`role_id`), key `ur_id` (`ur_id`)) engine=myisam default chart=utf8 comment='用户角色关联表';

5:用户表:

create table if not exists `wj_ur` ( `ur_id` int(11) unsigned not null auto_increment comment '用户id', `urname` varchar(50) not null comment '用户名', `password` varchar(100) not null comment '密码', `create_time` int(10) default null comment '创建时间', `update_time` int(10) default null comment '更新时间', `status` int(1) default null comment '状态 0禁用 1启用', primary key (`ur_id`)) engine=myisam default chart=utf8 comment='用户表';

二:关于权限操作的常用配置:

你可以在config.php文件的数组中增加:

// 加载扩展配置文件'load_ext_config' => 'ur',

这样的话我们就可以将我们的所有权限配置放置在config.php同级的ur.php文件中,ur.php文件配置如下:

<?php/** * 用户权限配置文件 */return array(  // 是否需要认证  'ur_auth_on' => true,  // 认证类型 1 登录认证 2 实时认证  'ur_auth_type' => 1,  // 后台用户认证ssion标记  'ur_auth_key' => 'wjauthid',  // 默认认证网关  'ur_auth_gateway' => '?m=admin&c=login&a=index',  // rbac_db_dsn 数据库连接dsn  // 角色表名称,c('db_prefix')表示前缀  'rbac_role_table' => c('db_prefix') . 'role',  // 用户角色关联表名计算机有什么专业称  'rbac_ur_table' => c('db_prefix') . 'role_ur',  // 权限表名称  'rbac_access_table' => c('db_prefix') . 'access',  // 节点表名称  'rbac_node_table' => c('db_prefix') . 'node',  // 默认验证数据表模型  'ur_auth_model' => 'ur',  // 超级管理员的ssion标记  'admin_auth_key' => 'wjadministrator',  // 默认需要认证模块  'require_auth_module' => '',  // 默认需要认证操作  'require_auth_action' => '',  // 默认无需认证模块  'not_auth_module' => 'publ生物科学专业排名ic',  // 默认无需认证操作  'not_auth_action' => '',  // 是否开启游客授权访问  'guest_auth_on' => fal,  // 游客的用户id  'guest_auth_id' => 0,  // 后台用户名的ssion标记  'back_login_name' => 'loginbackname',  // 后台角色的ssion标记  'back_ur_role' => 'bakcurrole',  // 后台角色id的ssion标记  'back_role_id' => 'backroleid',  // 后台用户登录时间的ssion标记  'back_online_time' => 'backonlinetime',  // 后台在线间隔时间,以分钟为单位  'online_interval' => 180,  //退出登录的url  'logout_url' => '/test',);

三:关于权限操作的常用方法:

1:rbac::saveaccesslist($authid=null);

缓存权限列表,在这个方法可以传递空值的前提是:你在用户登录操作的时候要在 $_ssion[c(‘ur_auth_key’)] 中把用户的id保存下来,然后这里会将用户所对应的角色拥有的权限都保存在$_ssion[‘_access_list’]中

2:rbac::checkaccess()

判断用户访问的模块和方法是否需要权限认证

3:rbac::accessdecision()

断用户是否有访问权限的,即检测当前项目模块操作 是否在$_ssion[‘_access_list’]数组中,也就是说 在 $_ssion[‘_access_list’] 数组中$_ssion’_access动物的英语怎么写_list”当前控制器’是否存在。如果存在表示有权限 否则返回fla

4:rbac::checklogin();

判断用户是否登录,如果未登录则跳转到指定路径

5:rbac::getaccesslist($authid)

通过查询数据库 返回权限列表 $_ssion[‘_access_list’]的值

6:rbac::authenticate($map, $model=”)

传入查询用户的条件和用户表的model 返回数组包含用户的信息,如果不传model值的话使用配置项中的ur_auth_model

四:权限管理简单实现实例:

1:登录:

//获取传递的用户名和密码$urname = i('post.urname');$password = i('post.password');//生成认证条件$map = array();$map['urname'] = $urname;$map['status'] = array('eq', 1);//判断是否存在此用户$authinfo = rbac::authenticate($map);if (!$authinfo) {  $this->error('账号不存在');}if ($authinfo['password'] != md5($password)) {  $this->error('密码错误');}$ur_id = $authinfo['ur_id'];$role_ur = new model();$role = $role_ur->table(c("rbac_ur_table"))->alias("ur")->where("ur_id=" . $ur_id)->join(c("rbac_role_table") . " as role on role.id=ur.role_id")->field("id,name")->find();if (empty($role)) {  $this->error('此用户无对应的角色,无法登录');}//后台角色id的ssion标记ssion(c('back_role_id'), $role['id']);//后台角色的ssion标记ssion(c('back_ur_role'), $role['name']);//后台用户认证ssion标记ssion(c('ur_auth_key'), $authinfo['ur_id']);//后台用户名的ssion标记ssion(c('back_login_name'), $authinfo['urname']);//后台用户登录时间的ssion标记ssion(c('back_online_time'), time());//判断用户角色是否为超级管理员if ($role['id'] == '1') {  //超级管理员将超级管理员的ssion标记设置为true  ssion(c('admin_auth_key'), true);}// 缓存访问权限rbac::saveaccesslist();$this->success('登录成功', u('index/index'));

2:登录成功后的权限校验:

//验证是否登录rbac::checklogin();// 用户权限检查if (rbac::checkaccess() && !rbac::accessdecision()) {  // 没有权限 清除登录ssion 并抛出错误  if (c('rbac_error_page')) {    // 定义权限错误页面    redirect(c('rbac_error_page'));  } el {    if (c('guest_auth_on')) {      //开启游客访问    }    // 提示错误信息    $this->error(l('_valid_access_'));  }}//自动退出功能,判断后台用户登录时间的ssion标记是否超时if (ssion(c('back_online_time')) + c('online_interval') * 60 < time()) {  if (ssion('?' . c('ur_auth_key'))) {    ssion('[destroy]');    if (ist($_cookie[ssion_name()])) {      tcookie(ssion_name(), '', time() - 3600, '/');    }    ssion_destroy();  }  $this->error('超时请重新登录', u('login/index'));} 学前教育el {  ssion(c('back_online_time'), time());}

根据如上就可以实现用户角色的权限管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-07 16:03:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/021278059bf435bc2ac8b9528f587b54.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:thinkPHP3.2使用RBAC实现权限管理的实现.doc

本文 PDF 下载地址:thinkPHP3.2使用RBAC实现权限管理的实现.pdf

标签:用户   权限   角色   标记
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图