visualappeal / laravel-rbac
Laravel 5 的基于角色的访问控制
0.7.1
2021-11-15 15:26 UTC
Requires
- php: >=5.5.9
- illuminate/support: >=5.4
This package is auto-updated.
Last update: 2024-09-15 21:11:24 UTC
README
为Laravel 5提供简单的RBAC/ACL实现。兼容Laravel >=5.4的https://github.com/keepanitreel/laravel-rbac分支。
安装
使用以下命令通过composer安装此包(Packagist)
composer require visualappeal/laravel-rbac
或修改您的composer.json
"require": {
...
"visualappeal/laravel-rbac": "^0.7"
}
然后运行composer update
。
安装后,将ServiceProvider注册到config/app.php
中的providers
数组中
PHPZen\LaravelRbac\RbacServiceProvider::class,
发布迁移文件
$ php artisan vendor:publish --provider="PHPZen\LaravelRbac\RbacServiceProvider" --force
运行迁移
$ php artisan migrate
将RBAC中间件添加到您的app/Http/Kernel.php
protected $routeMiddleware = [ ... 'rbac' => '\PHPZen\LaravelRbac\Middleware\Rbac::class' ];
将Rbac trait添加到您的User
模型
use PHPZen\LaravelRbac\Traits\Rbac; class User extends Authenticatable { use Rbac; ... }
用法
角色
创建角色
$adminRole = new Role; $adminRole->name = 'Administrator'; $adminRole->slug = 'administrator'; $adminRole->description = 'System Administrator'; $adminRole->save(); $editorRole = new Role; $editorRole->name = 'Editor'; $editorRole->slug = 'editor'; $editorRole->description = 'Editor'; $editorRole->save();
将角色分配给用户
$user = User::find(1); $user->roles()->attach($adminRole->id);
您也可以一次分配多个角色
$user->roles()->attach([$adminRole->id, $editorRole->id]);
从用户中撤销角色
$user->roles()->detach($adminRole->id);
您也可以一次撤销多个角色
$user->roles()->detach([$adminRole->id, $editorRole->id]);
同步角色
$user->roles()->sync([$editorRole->id]);
如果未传递id到同步方法,则将撤销用户已分配的任何角色。
权限
创建权限
$createUser = new Permission; $createUser->name = 'Create user'; $createUser->slug = 'user.create'; $createUser->description = 'Permission to create user'; $createUser->save(); $updateUser = new Permission; $updateUser->name = 'Update user'; $updateUser->slug = 'user.update'; $updateUser->description = 'Permission to update user'; $updateUser->save();
将权限分配给角色
$adminRole = Role::find(1); $adminRole->permissions()->attach($createUser->id);
您也可以一次分配多个权限
$adminRole->permissions()->attach([$createUser->id, $updateUser->id]);
从角色中撤销权限
$adminRole->permissions()->detach($createUser->id);
您也可以一次撤销多个权限
$adminRole->permissions()->detach([$createUser->id, $updateUser->id]);
同步权限
$adminRole->permissions()->sync([$updateUser->id]);
如果未传递id到同步方法,则将撤销已分配给角色的任何权限。
检查用户角色/权限
可以使用hasRole
和canDo
方法在User
实例上检查角色和权限。
$isAdmin = Auth::user()->hasRole('administrator'); // pass role slug as parameter $isAdminOrEditor = Auth::user()->hasRole('administrator|editor'); // using OR operator $canUpdateUser = Auth::user()->canDo('update.user'); // pass permission slug as parameter $canUpdateOrCreateUser = Auth::user()->canDo('update.user|create.user'); // using OR operator
保护路由
Laravel RBAC提供中间件来保护单个路由和路由组。中间件期望两个逗号分隔的参数
- is或can作为第一个参数 - 检查的内容(角色/权限)
- 角色/权限slug作为第二个参数
Route::get('/backend', [ 'uses' => 'BackendController@index', 'middleware' => ['auth', 'rbac:is,administrator'] ]); Route::get('/backend', [ 'uses' => 'BackendController@index', 'middleware' => ['auth', 'rbac:is,administrator|editor'] ]); Route::get('/dashboard', [ 'uses' => 'DashboardController@index', 'middleware' => ['auth', 'rbac:can,view.dashboard'] ]); Route::get('/dashboard', [ 'uses' => 'DashboardController@index', 'middleware' => ['auth', 'rbac:can,view.dashboard|view.statistics'] ]);
Blade指令
Laravel RBAC提供两个Blade指令来检查用户是否分配了角色/权限。
检查角色
@ifUserIs('administrator')
// show admin content here
@else
// sorry
@endif
@ifUserIs('administrator|editor')
// show editor content here
@else
// sorry
@endif
检查权限
@ifUserCan('delete.user')
// show delete button
@endif
@ifUserCan('delete.user|manage.user')
// show delete button
@endif
许可证
Laravel RBAC是开源软件,根据MIT许可证授权。