enclave-code / static-auth-manager
静态管理Laravel中的角色和权限
v1.0.1
2020-03-31 03:57 UTC
Requires
- php: >=7.2
Requires (Dev)
- orchestra/testbench: ^3.7
- phpunit/phpunit: 8.3.4
This package is auto-updated.
Last update: 2024-09-30 01:52:08 UTC
README
通过领域驱动规则管理你的Laravel应用程序中的用户权限和角色。
示例
添加单个角色
$user->assignRole('admin'); $user->hasRole('admin'); // true
添加多个角色
$user->assignRole(['admin','user']); $user->hasRole('admin'); // true $user->hasRole('user'); // true
您可以通过在 config/permission.php
文件中编写代码来定义角色和权限。
'role' => [ 'admin' => [ 'news/*', // Allow all paths beginning with news/ ], 'editor' => [ 'news/*', ], 'user' => [ 'news/show', // Explicitly allow news/show ], ]
您可以通过以下方式检查权限
$admin->hasPermissionTo('news/delete'); // true $editor->hasPermissionTo('news/delete'); // false $user->hasPermissionTo('news/delete'); // false
安装
# Add library composer require enclave-code/static-auth-manager # Public vendors php artisan vendor:publish
对于Laravel 5.5之前的版本,需要注册服务提供者。
// config/app.php 'providers' => [ EnclaveCode\StaticAuthManager\Providers\PermissionServiceProvider::class, ];
使用方法
向模型添加特质
use HasRoles;
使用角色
您可以在 config/permission.php
文件中定义角色。
// config/permission.php 'roles' => [ 'role_name' => [], 'admin' => [], ],
分配角色/角色
向模型添加角色。
$model->assignRole('admin');
向模型添加角色。
$model->assignRole(['admin','user']);
检查角色/角色
您可以通过以下方式检查角色
$model->hasRole('admin'); $model->getRoles(); // return collection(['admin'])
$model->hasRole(['admin','user']); $model->getRoles(); // return collection(['admin','user']);
解除角色/角色
您可以通过以下方式解除角色
$model->assignRole(['admin','user']); $model->detachRole('admin'); $model->getRoles(); // return collection(['user'])
使用权限
权限基于MQTT语法。权限指定为路径。因此,可以映射不同的安全级别,通常通过通配符释放。
检查权限
$model->hasPermissionTo('users/show/email');
$model->hasPermissionTo(['users/show', 'users/edit']);
$model->hasAnyPermission('users/show/email');
$model->hasAnyPermission(['users/show', 'users/edit']);
配置
*
表示所有后续内容的通配符
您可以在 config/permission.php
文件中定义角色权限。
// config/permission.php 'roles' => [ 'role_name' => [ 'users/*' ], 'admin' => [ 'users/create', ], ],
使用Blade指令
您可以在视图中使用Blade指令。
角色
@role('admin') Show if user is admin @endrole
@unlessrole('admin') Show if user is not admin @endunlessrole
权限
@permission('user/edit') Show if user has rights to user/edit @endpermission
您也可以使用多个权限。
@permission('user/edit|user/create') Show if user has rights to user/edit AND user/create @endpermission
@anypermission('user/edit|user/create') Show if user has rights to user/edit OR user/create @endanypermission
中间件
将中间件添加到您的 src/Http/Kernel.php
class Kernel extends HttpKernel { ... protected $routeMiddleware = [ ... 'permission' => \EnclaveCode\StaticAuthManager\Middleware\HasAnyPermissionMiddleware::class, 'role' => \EnclaveCode\StaticAuthManager\Middleware\HasRoleMiddleware::class ] }
然后像这样使用它
// If user has 'admin' or 'user' role Route::group(['middleware' => ['role:admin|user']], function () { // }) // If user has 'admin' role Route::group(['middleware' => ['role:admin']], function () { // }) // If user has 'user/create' Route::group(['middleware' => ['permission:create/user']], function () { // }) // If user has 'user/create' or 'user/edit' Route::group(['middleware' => ['permission:create/user|user/edit']], function () { // })
配置
示例配置
<?php // config/permission.php return [ /** * DB Column name from model */ 'column_name' => env('SAM_ROLE_COLUMN_NAME', 'role'), /** * Roles with permission as path * * - `*` Wildcard everything following * * 'admin' => [ * 'users/*', * ], * 'user' => [ * 'users/create' * ] * */ 'roles' => [], ];
在 .env 中添加额外的配置
# StaticAuthManager - column name in user model SAM_ROLE_COLUMN_NAME='role'
测试
composer test # same to ./vendor/bin/phpunit
待办事项
- 向用户添加新迁移,带有新列(角色)
- 在readme中描述角色和权限的工作方式
致谢
主要从 sourceboat/laravel-static-permission 分支。
许可证
MIT许可证(MIT)。有关更多信息,请参阅 许可证文件。