朋友们一定用过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,谢谢大家的阅读!祝每天开心~
版权声明:本文为博主原创文章,未经博主允许不得转载。
微信赞赏
支付宝赞赏
发表评论