在开发基于 thinkphp6 的项目时,权限管理是一个关键的功能模块。最初,我尝试通过手动编写代码来处理用户权限,但这不仅耗时,而且容易出错。幸运的是,我找到了 itkee/think-auth 这个强大的权限管理库,通过 composer 轻松解决了我的问题。
安装与配置
使用 Composer 安装 itkee/think-auth 非常简单,只需运行以下命令:
composer require itkee/think-auth
安装完成后,需要在项目配置文件中进行一些设置。以下是一个基本的配置示例:
'auth' => [ 'auth_on' => 1, // 权限开关 'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。 'auth_group' => 'auth_group', // 用户组数据不带前缀表名 'auth_group_Access' => 'auth_group_access', // 用户-用户组关系不带前缀表名 'auth_rule' => 'auth_rule', // 权限规则不带前缀表名 'auth_user' => 'member', // 用户信息不带前缀表名 ],
此外,还需要导入必要的数据表。这些表包括规则表(think_auth_rule)、用户组表(think_auth_group)和用户组明细表(think_auth_group_access)。以下是创建这些表的 sql 语句:
立即学习“PHP免费学习笔记(深入)”;
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 '', `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; 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; 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;
使用方法
itkee/think-auth 库的使用非常灵活。以下是几个常见的使用场景:
-
检测用户权限:
// 检测权限 if($auth->check('show_button',1)){ // 第一个参数是规则名称,第二个参数是用户UID //有显示操作按钮的权限 }else{ //没有显示操作按钮的权限 }
-
节点认证:
可以通过在公共控制器中定义 _initialize 方法来实现:
<?php use thinkController; use thinkauthAuth; class Base extends Controller { public function _initialize() { $controller = request()->controller(); $action = request()->action(); $auth = new Auth(); if(!$auth->check($controller . '-' . $action, session('uid'))){ $this->error('你没有权限访问'); } } }
-
多规则认证:
可以同时对多个规则进行认证,支持 or 和 and 关系:
$auth->check('rule1,rule2', uid); // or 关系 $auth->check('rule1,rule2', uid, 'and'); // and 关系
-
获取用户组:
$auth->getGroups(uid);
-
按用户属性判断权限:
可以根据用户属性(如积分)进行权限判断:
// 规则表中的 condition 字段 // name: grade1, condition: {score}<100 // name: grade2, condition: {score}>100 and {score}<200 // name: grade3, condition: {score}>200 and {score}<300 $auth->check('grade1', uid); // 判断用户积分是不是0-100 $auth->check('grade2', uid); // 判断用户积分是不是在100-200 $auth->check('grade3', uid); // 判断用户积分是不是在200-300
总结
使用 itkee/think-auth 库通过 Composer 进行权限管理,不仅简化了开发流程,还大大提高了代码的可维护性和扩展性。通过这个库,我能够快速实现复杂的权限控制逻辑,极大地提升了项目的效率和安全性。如果你也在 ThinkPHP6 项目中遇到权限管理问题,不妨试试这个库,相信会给你带来意想不到的效果。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END