xdroidteam / xtrust
基于角色和权限的laravel权限管理
Requires
- cviebrock/eloquent-sluggable: ^9.0|^10.0
- illuminate/auth: ^9.0|^10.0
- illuminate/support: ^9.0|^10.0
This package is auto-updated.
Last update: 2024-09-20 13:36:31 UTC
README
内容
关键特性
- 您有角色和权限。权限可以附加到角色,角色可以附加到单个用户,但您也可以直接将权限/权限附加或从特定用户中移除。
- 权限和角色存储在缓存中,编辑它们会自动刷新。我们使用缓存标签,因此常规文件或数据库缓存驱动程序不起作用,请使用memcached。
- 灵感来自Zizaco/entrust
- 请注意,该包处于开发中,仅与Laravel 5.2进行了测试。
安装
将以下行添加到您的composer.json(Laravel 5.4及以下)
"xdroidteam/xtrust": "0.1.*"
将以下行添加到您的composer.json(Laravel 5.5)
"xdroidteam/xtrust": "0.2.*"
然后运行composer update
。
或者您可以从终端运行composer require
命令
composer require xdroidteam/xtrust
然后在您的config/app.php
中将以下内容添加到providers
数组(Laravel 5.5之后不需要)
XdroidTeam\XTrust\XTrustServiceProvider::class,
并添加到aliases
数组(Laravel 5.5之后不需要)
'XTrust' => XdroidTeam\XTrust\XTrust::class,
如果您打算使用中间件(需要Laravel 5.1或更高版本),您还需要添加以下内容
'permission' => \XdroidTeam\XTrust\Middleware\XTrustPermissionMiddleware::class,
到routeMiddleware
数组在app/Http/Kernel.php
。
迁移
部署迁移文件
php artisan vendor:publish --tag=xdroidteam-xtrust
现在您可以使用artisan migrate命令运行它
php artisan migrate
模型
角色
在app/models/Role.php
内部创建一个Role模型,使用以下示例
<?php namespace App\Models; use XdroidTeam\XTrust\Models\XTrustRole; class Role extends XTrustRole { ... }
权限
在app/models/Permission.php
内部创建一个Permission模型,使用以下示例
<?php namespace App\Models; use XdroidTeam\XTrust\Models\XTrustPermission; class Permission extends XTrustPermission { ... }
用户
接下来,在您的现有User
模型中使用XTrustUserTrait
特征。例如
<?php use XdroidTeam\XTrust\Traits\XTrustUserTrait; class User extends Eloquent { use XTrustUserTrait; // add this trait to your user model ... }
别忘了运行composer自动加载
composer dump-autoload
概念
有角色和权限。您可以将许多权限附加到角色,并将许多角色附加到用户,就像在Zizaco/entrust中一样。主要区别在于您可以直接将权限/权限附加或从用户中移除。
例如
您有四个权限
- can_show
- can_create
- can_edit
- can_delete
您有两个角色,具有以下权限
- admin
- can_show
- can_create
- can_edit
- can_delete
- user
- can_show
您有两个用户,具有以下角色
- Adam Admin
- admin
- Super User
- user
如果您不希望Adam Admin能够删除,您可以简单地从他那里移除can_delete权限。管理员组仍然具有can_delete权限,但Adam将不会。如果您想Super User能够编辑,您可以将其权限(can_edit)附加给她。除了她之外,用户角色中的其他用户仍然无法编辑。
因为这个逻辑,您只能检查用户的权限,而不是角色!
使用方法
权限检查
简单检查
检查一个权限
XTrust::hasPermission('can_delete');
如果认证用户有权限,则返回true,如果没有,则返回false。
检查多个权限
XTrust::hasPermissions(['can_delete', 'can_edit']);
如果已认证用户拥有所有权限,则返回 true,否则返回 false。
或者
XTrust::hasOneOfPermissions(['can_delete', 'can_edit']);
如果已认证用户拥有其中一项权限,则返回 true,否则返回 false。
您也可以在用户模型内进行检查
$user = User::find(1); $user->hasPermission('can_delete'); // OR $user->hasPermissions(['can_delete', 'can_edit']); // OR $user->hasOneOfPermissions(['can_delete', 'can_edit']);
中间件
Route::group(['middleware' => ['auth', 'permission:can_show']], function(){ Route::get('/', 'HomeController@index'); });
对于多个权限检查,使用管道符号作为 OR 运算符
Route::group([ 'middleware' => [ 'auth', 'permission:can_show|can_create|can_edit|can_delete' ] ], function(){ Route::get('/admin', 'AdminController@index'); });
要模拟 AND 功能,只需使用多个中间件实例。对于多个权限检查,使用管道符号作为 OR 运算符
Route::group([ 'middleware' => [ 'auth', 'permission:can_show', 'permission:can_create' ] ], function(){ Route::get('/admin', 'AdminController@index'); });
Blade
@permission('can_delete') {!! Form::open([ 'url' => '/users/'.$user->id, 'method'=> "DELETE" ] ) !!} <button class="btn btn-sm btn-danger"> Delete </button> {!! Form::close() !!} @endpermission
多个权限
@permissions(['can_show', 'can_delete']) <span>Something</span> @endpermissions
如果已认证用户拥有所有权限,则返回 true,否则返回 false。
或者
@oneofpermissions(['can_show', 'can_delete']) <span>Something</span> @endoneofpermissions
如果已认证用户拥有其中一项权限,则返回 true,否则返回 false。
角色检查
简单检查
检查一个角色
XTrust::hasRole('can_delete');
如果已认证用户拥有该角色,则返回 true,否则返回 false。
检查多个角色
XTrust::hasRoles(['can_delete', 'can_edit']);
如果已认证用户拥有所有这些角色,则返回 true,否则返回 false。
或者
XTrust::hasOneOfRoles(['can_delete', 'can_edit']);
如果已认证用户拥有其中任何一个角色,则返回 true,否则返回 false。
您也可以在用户模型内进行检查
$user = User::find(1); $user->hasRole('can_delete'); // OR $user->hasRoles(['can_delete', 'can_edit']); // OR $user->hasOneOfRoles(['can_delete', 'can_edit']);
附加/移除
始终使用角色的 id 或权限的 id 进行附加/移除操作!
附加到用户
将一个角色附加到用户
$user->attachRole(1);
将多个角色附加到用户
$user->attachRoles([1,2]);
将一个权限附加到用户
$user->attachPermission(1);
将多个权限附加到用户
$user->attachPermissions([1,2]);
从用户中移除
从一个用户移除一个角色
$user->detachRole(1);
从一个用户移除多个角色
$user->detachRoles([1,2]);
从一个用户移除一个权限
$user->detachPermission(1);
从一个用户移除多个权限
$user->detachPermissions([1,2]);
附加到角色
将一个权限附加到一个角色
$role->attachPermission(1);
将多个权限附加到一个角色
$role->attachPermissions([1,2]);
从角色中移除
从一个角色移除一个权限
$role->detachPermission(1);
从一个角色移除多个权限
$role->detachPermissions([1,2]);