shiwuhao / laravel-rbac
A laravel Role-Based Access Control package
Installs: 1 859
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2025-05-09 13:53:14 UTC
README
laravel-rbac是一个基于Laravel框架的扩展包。
该扩展包为Laravel框架提供了RBAC模型的实现,并且支持模型授权,比如对菜单,分类等模型的授权。
Permission模型为一对一多态模型,默认提供Action模型的授权管理,并根据路由文件自动生成Action模型的权限节点。如需扩展其他模型,新建模型后,添加Shiwuhao\Rbac\Models\Traits\PermissibleTrait即可,会自动同步模型节点到permissions表中。
版本信息
Rbac | Laravel | PHP |
---|---|---|
1.3.x | > 8.x | > =8.x |
安装方法
使用composer快速安装扩展包
$ composer require shiwuhao/laravel-rbac -vvv
配置信息
发布配置文件
php artisan vendor:publish
会生成以下两个文件
config/rbac.php
database/create_rbac_tables.php
数据迁移
php artisan migrate
迁移后,将出现四个新表:
roles -- 角色表
actions -- 操作表
permissions -- 权限表
role_user -- 角色和用户之间的多对多关系表
role_permission -- 角色和权限之间的多对多关系表
模型
Role
创建角色模型 app/Models/Role.php,继承\Shiwuhao\Rbac\Models\Role
<?php namespace App\Models; class Role extends \Shiwuhao\Rbac\Models\Role { }
Permission
创建权限模型 app/Models/Permission.php,继承\Shiwuhao\Rbac\Models\Permission
<?php namespace App\Models; class Permission extends \Shiwuhao\Rbac\Models\Permission { }
Action
创建操作模型 app/Models/Action.php,继承\Shiwuhao\Rbac\Models\Action
<?php namespace App\Models; class Action extends \Shiwuhao\Rbac\Models\Action { }
User
用户模型中 添加 UserTrait
<?php namespace App\Models; use Shiwuhao\Rbac\Models\Traits\UserTrait; class User extends Authenticatable { use UserTrait; // 添加这个trait到你的User模型中 }
扩展模型授权,比如菜单 Menu
创建菜单模型 app/Models/Menu.php,使用 Shiwuhao\Rbac\Models\Traits\PermissibleTrait。Menu模型的增删改会自动同步到permissions表中。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Shiwuhao\Rbac\Models\Traits\PermissibleTrait; class Menu extends Model { use PermissibleTrait; }
使用
Action 权限节点
Action和Permission为一对一多态模型,创建Action节点会自动同步到Permission模型
创建一个Action节点
$action = new App\Models\Action(); $action->name= 'user:index'; $action->label= '用户列表'; $action->method= 'get'; $action->uri= 'backend/users'; $action->save();
批量生成Action节点
基于当前路由批量生成Action权限节点,可在config/rbac.php配置文件中通过path,except_path指定路径
php artisan rbac:auto-generate-actions
Role 角色
创建一个角色
$role = new App\Models\Role(); $role->name= 'Administrator'; $role->label= '超级管理员'; $role->remark= '备注'; $role->save();
给角色绑定权限和用户
$role = App\Models\Role::find(1); // 绑定权限 $role->permissions()->sync([1, 2, 3, 4]); // 同步 $role->permissions()->attach(5);// 附加 $role->permissions()->detach(2);// 分离 // 绑定用户 $role->users()->sync([1, 2, 3, 4]);// 同步 $role->users()->attach(5);// 附加 $role->users()->detach(5);// 分离
User 用户
获取用户角色
$user = App\Models\User::find(1); $user->roles;
给用户绑定角色
$user->roles()->sync([1, 2, 3, 4]);// 同步 $user->roles()->attach(5);// 附加 $user->roles()->detach(5);// 分离
获取用户拥有的权限节点
$user->permissions;
返回数据为Collection集合,转数组可直接使用->toArray()
鉴权
$user->hasRole('admin'); $user->hasRole(['admin','test'],true); $user->hasPermission('user:add'); $user->hasPermission($names = ['user:add','user:edit'],$checkColumn = 'name',$and = false);
Middleware
在app/Http/Kernel.php文件中添加路由中间件
protected $routeMiddleware = [ 'permission' => Shiwuhao\Rbac\Middleware\PermissionMiddleware, ];
添加后即可在路由中使用
Route::middleware('permission')->group(function () { Route::prefix('backend')->group(function () { Route::get('users', [UserController::class, 'index']); }); });
License
MIT