yaobiao/think-permission
Composer 安装命令:
composer require yaobiao/think-permission
包简介
ThinkPHP6 权限包
关键字:
README 文档
README
ThinkPHP6 权限包
安装
composer require xiaodi/think-permission
使用
创建必要数据
规则
use xiaodi\Permission\Model\Permission; // 创建一条可查看首页的权限 Permission::create(['name' => 'home']);
角色
use xiaodi\Permission\Model\Role; // 创建�一个名为编辑的角色 Role::create(['name' => 'writer']);
用户
use xiaodi\Permission\Model\User; // 创建�一个名为xiaodi的用户 User::create(['name' => 'xiaodi']);
分配关系
规则与角色
use xiaodi\Permission\Model\Permission; use xiaodi\Permission\Model\Role; // 将home规则分配到writer角色 $permission = Permission::findByName('home'); $role = Permission::findByName('writer'); $permission->assignRole($role); // 将home规则分配到writer角色 (跟上面效果一样) $permission = Permission::findByName('home'); $role = Permission::findByName('writer'); $role->assignPermission($permission);
用户与角色
use xiaodi\Permission\Model\User; use xiaodi\Permission\Model\Role; // 为用户xiaodi分配 writer角色 $user = User::findByName('xiaodi'); $role = Permission::findByName('writer'); $user->assignRole($role); // 为用户xiaodi分配 writer角色 (跟上面效果一样) $user = User::findByName('xiaodi'); $role = Permission::findByName('writer'); $role->assignUser($user);
解除关系
解除规则与角色
use xiaodi\Permission\Model\Permission; use xiaodi\Permission\Model\Role; // home规则与writer角色 解除关系 $permission = Permission::findByName('home'); $role = Permission::findByName('writer'); $permission->removeRole($role); // writer角色与home规则 解除关系(跟上面效果一样) $permission = Permission::findByName('home'); $role = Permission::findByName('writer'); $role->removePermission($permission);
解除用户与角色
use xiaodi\Permission\Model\User; use xiaodi\Permission\Model\Role; // 用户xiaodi与writer角色 解除关系 $user = User::findByName('xiaodi'); $role = Permission::findByName('writer'); $user->removeRole($role); // writer角色与用户xiaodi 解除关系 (跟上面效果一样) $user = User::findByName('xiaodi'); $role = Permission::findByName('writer'); $role->removeUser($user);
权限判断
手动
use xiaodi\Permission\Model\User; $user = User::findByName('xiaodi'); if ($user->can('home')) { // 有 `home`权限 } else { // 无 `home`权限 }
路由守护
用户信息,请手动注入到$request->user上,并且使用 \xiaodi\Permission\Contract\UserContract 接口。 Demo
/home 路由添加一条权限控制 访问者有 home权限才能允许访问
Route::post('/home', 'home/index')->middleware('auth', 'home');
中间件注入用户
用户模型
<?php namespace app\model; use think\Request; use xiaodi\Permission\Contract\UserContract; class User implements UserContract { use \xiaodi\Permission\Traits\User; }
注入用户信息
<?php namespace app\middleware; use think\Request; use app\model\User; class Auth { public function handle($request, \Closure $next) { $uid = 1; $user = User::find($uid); $request->user = $user; return $next($request); } }
数据表
permission
CREATE TABLE `permission` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL COMMENT '规则唯一标识', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
role
CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL COMMENT '角色唯一标识', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
role-permission-access
CREATE TABLE `role_permission_access` ( `role_id` int(11) NOT NULL COMMENT '角色主键', `permission_id` int(11) NOT NULL COMMENT '规则主键', PRIMARY KEY (`role_id`,`permission_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
user
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '用户唯一标识', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
user_role_access
CREATE TABLE `user_role_access` ( `user_id` int(11) NOT NULL COMMENT '用户主键', `role_id` int(11) NOT NULL COMMENT '角色主键', PRIMARY KEY (`user_id`,`role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
中间件
默认自带以下中间件
- 规则中间件
- 角色中间件
规则中间件
#route/app.php # 拥有 edit 规则的用户 可以访问此路由 Route::rule('/testPermission', function(){ return 'edit'; }, 'GET')->allowCrossDomain()->middleware('auth.permission', 'edit');
角色中间件
#route/app.php # 拥有 editer 角色的用户 可以访问此路由 Route::rule('/testRole', function(){ return 'editer'; }, 'GET')->allowCrossDomain()->middleware('auth.role', 'editer');
yaobiao/think-permission 适用场景与选型建议
yaobiao/think-permission 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 78 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 11 月 25 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「thinkphp」 「thinkphp-auth」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 yaobiao/think-permission 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 yaobiao/think-permission 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 yaobiao/think-permission 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
ThinkPHP6 权限包
这是使用阿里云日志服务sls的thinkphp6.0日志驱动,支持函数计算
用于 thinkphp6 框架上的基于 OCI 的 Oracle 数据库驱动。thinkphp5.1 请使用 1.0 版本
ThinkPHP6分页驱动
The ThinkPHP Framework.
the littlemo common tools
统计信息
- 总下载量: 78
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 7
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-11-25