luizhenriqueferreira / laravel-acl
Laravel 的 ACL 包
v1.1
2021-04-17 01:20 UTC
Requires
- php: ^7.2.5
- illuminate/container: ^6.20|^7.0|^8.0
- illuminate/contracts: ^6.20|^7.0|^8.0
- illuminate/database: ^6.20|^7.0|^8.0
- illuminate/support: ^6.20|^7.0|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^3.8|^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-17 08:44:04 UTC
README
Laravel Acl 是一个用于 Laravel 框架的 PHP 包,用于操作访问控制列表。该包提供了一种更简单的方式来控制网站上用户的角色和权限。
要求
- PHP >=7.0
安装
- 在终端中输入以下命令
composer require luizhenriqueferreira/LaravelAcl
- 将服务提供者添加到 config/app.php 文件的 providers 部分
Laravel 5.5 使用包自动发现,因此不需要手动添加 ServiceProvider。
'providers' => [ // ... LuizHenriqueFerreira\LaravelAcl\LaravelAclServiceProvider::class, // ... ],
- 运行迁移
php artisan migrate
使用方法
在您的 User 模型上使用以下特性
// ... use LuizHenriqueFerreira\LaravelAcl\Models\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... Your User Model Code }
在代码中使用
检查角色
if ($user->hasRoles'('admin')) { // User is admin } // or if ($user->hasRoles('admin', 'writer')) { // User is admin or writer } // or if ($user->hasRoles(['admin', 'writer'])) { // User is admin or writer }
附加角色
$user->attachRoles(1); //or $user->attachRoles('admin'); //or $user->attachRoles(Role::find(1)); //or $user->attachRoles(1, 2); //or $user->attachRoles('admin', 'writer'); //or $user->attachRoles(Role::find(1), Role::find(2)); //or $user->attachRoles(1, 'writer', Role::find(3)); //or $user->attachRoles([1]); //or $user->attachRoles(['admin']); //or $user->attachRoles([Role::find(1)]); //or $user->attachRoles([1, 2]); //or $user->attachRoles(['admin', 'writer']); //or $user->attachRoles([Role::find(1), Role::find(2)]); //or $user->attachRoles([1, 'writer', Role::find(3)]);
相同的函数,移除角色
$user->detachRoles('writer'); // ... $user->detachRoles(2, 'writer', Role::find(2)); // ... $user->detachRoles([2, 'writer', Role::find(2)]);
清除所有角色
$user->detachRoles();
检查权限
if ($user->hasPermissions('create-post')) { // User has permission "create post" } // or if ($user->hasPermissions('create-post', 'update-post')) { // User has permission "create post" or "update post" } // or if ($user->hasPermissions(['create-post', 'update-post'])) { // User has permission "create post" or "update post" }
附加权限
$role->attachPermissions(1); //or $role->attachPermissions('create-post'); //or $role->attachPermissions(Permission::find(1)); //or $role->attachPermissions(1, 2); //or $role->attachPermissions('create-post', 'update-post'); //or $role->attachPermissions(Permission::find(1), Permission::find(2)); //or $role->attachPermissions(1, 'update-post', Permission::find(3)); //or $role->attachPermissions([1]); //or $role->attachPermissions(['create-post']); //or $role->attachPermissions([Permission::find(1)]); //or $role->attachPermissions([1, 2]); //or $role->attachPermissions(['create-post', 'update-post']); //or $role->attachPermissions([Permission::find(1), Permission::find(2)]); //or $role->attachPermissions([1, 'update-post', Permission::find(3)]);
相同的函数,移除权限
$role->detachPermissions('create-post'); // ... $role->detachPermissions(1, 'update-post', Permission::find(3)); // ... $role->detachPermissions([1, 'update-post', Permission::find(3)]);
清除所有权限
$role->detachPermissions();
查看代码以获取更多信息... =)
使用 blade 指令
您还可以使用指令来验证当前登录的用户是否具有任何角色或权限。
检查角色
@hasroles('admin') <!-- User has role admin --> @elsehasrole('writer') <!-- User has role writer --> <!-- ... --> @else <!-- User with other roles --> @endrole
或在一个指令中检查更多角色
@hasroles(['admin', 'writer']) <!-- User has next roles: admin, writer --> @endhasrole
检查权限
@can('create-post') <!-- User can create post --> @elsecan('edit-post') <!-- User can edit post --> @endcan
使用中间件
您可以使用角色中间件来检查对某些路由的访问
Route::middleware(['role:admin'])->group(function() { // Only for user with role admin Route::get('/admin', function() { // some code }); });
也可以使用权限中间件
Route::middleware(['permission:create-post'])->group(function() { // Only for user with permission create post Route::get('/admin/post', function() { // some code }); });
或者一起使用角色和权限中间件
Route::middleware(['role:admin,moderator', 'permission:remove-post'])->group(function() { // Only for user with role moderator and with permission create post Route::get('/admin/post/remove', function() { // some code }); });
许可证
Laravel Acl 包使用 MIT 许可证。