Welcome to

Mr.Xiong

Home / ThinkPHP / TP5之AUTH权限管理

TP5之AUTH权限管理

前言:

朋友们一定用过Rbac,那么Auth和Rbac这俩儿权限管理的区别在哪呢?一句话概括:Auth权限验证拥有着比Rbac更为灵活的处理方式。那么今天我就来分享一下Tp5的Auth权限管理。

一、安装

首先进入Packagist这个包库,地址为:https://packagist.org/ 。接着去搜索think_auth,像以下这样

点开第一个,不要问为什么,因为使用人群最多!点开以后有一行命令特别重要【composer require 5ini99/think-auth】好啦,现在可以在你的框架当中进行安装了。(前提是你有安装composer,如未安装到本博客中搜索composer即可)安装完成会在框架vendor目录中生成5ini99文件夹,如下图

二、数据库

实际上点开Auth.php这个文件,顶部的注释解释数据库已经非常明白了,如下代码进行创建

//数据库
/*
-- ----------------------------
-- think_auth_rule,规则表,
-- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `name` char(80) NOT NULL DEFAULT '',
    `title` char(20) NOT NULL DEFAULT '',
    `type` tinyint(1) NOT NULL DEFAULT '1',
    `status` tinyint(1) NOT NULL DEFAULT '1',
    `condition` char(100) NOT NULL DEFAULT '',  # 规则附件条件,满足附加条件的规则,才认为是有效的规则
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group 用户组表,
-- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group`;
    CREATE TABLE `think_auth_group` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `title` char(100) NOT NULL DEFAULT '',
    `status` tinyint(1) NOT NULL DEFAULT '1',
    `rules` char(80) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access 用户组明细表
-- uid:用户id,group_id:用户组id
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group_access`;
    CREATE TABLE `think_auth_group_access` (
    `uid` mediumint(8) unsigned NOT NULL,
    `group_id` mediumint(8) unsigned NOT NULL,
    UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
    KEY `uid` (`uid`),
    KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 */

如果通过以下代码你看不懂表与表之间的关系,那么看下图

三、用户管理

操作用户表,完成用户的添加功能、列表页功能、编辑功能,很简单没啥说的。(其中 setAuth 设置权限方法在完成规则管理、用户组管理之后再写)。

四、规则管理

操作规则表,基于原表新增字段pid(父级id)和nav(导航菜单),然后完成规则表的添加功能、列表页功能、编辑功能。注意,因为存在pid这样区分了父子级,所以添加功能、列表页功能得使用上树状结构;编辑功能时,别忘了在处理页面中父规则的下拉框时,要获得除去自己和自己的子集的数据。

五、用户组管理

操作用户组明细表,完成用户的添加功能、列表页功能、编辑功能。注意在添加功能和编辑功能时要拿出规则表中的nav(导航菜单)和title(规则中文名称)。

六、权限验证实现

在公共控制器的构造方法中,除了判断是否登录,加上如下代码去实现权限验证:

/**
 * 权限验证
 */
//获取添加规则;换句话说获取当前模块、控制器、方法
$rule = request()->module() . '/' . request()->controller() . '/' . request()->action();
//实例化Auth类调用check方法来执行验证 注意Auth的命名空间
$res = (new Auth())->check($rule,session('admin.uid'));
if(!$res){
   //不通过的时候做出判断
   return $this->error('没有操作权限');
}

七、附加规则

在规则管理的规则添加页面中新增一个文本框为附加规则,接着在用户表中新增一个字段score(积分) 然后分别给上一些积分,比如说admin用户给200分;xiong用户给100分。

然后找到规则表中condition这个字段,给上{score}>100这个值,那么咱们用xiong这个用户登录(此用户有100积分)。虽然这个用户有文章管理员权限,但是因为积分不大于100,所以也操作不了文章管理员的功能;相反xiong的积分改为99,就能操作文章管理员的功能啦,这就是附加规则的作用。多个规则可以这样写:{score>}50 and {score}<100,这个意思就是说积分得大于50小于100才能操作某某管理。

 

我这样分析Tp5的Auth权限管理你能理解了吗?如果你不能理解…….对你无语!

 

Finally,谢谢大家的阅读!祝每天开心~
版权声明:本文为博主原创文章,未经博主允许不得转载。

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

雄心勃勃但谦卑温逊!

>> <<