Laravel 的 ACL 包

v1.1 2021-04-17 01:20 UTC

This package is auto-updated.

Last update: 2024-09-17 08:44:04 UTC


README

Laravel Acl 是一个用于 Laravel 框架的 PHP 包,用于操作访问控制列表。该包提供了一种更简单的方式来控制网站上用户的角色和权限。

要求

  • PHP >=7.0

安装

  1. 在终端中输入以下命令
composer require luizhenriqueferreira/LaravelAcl
  1. 将服务提供者添加到 config/app.php 文件的 providers 部分

Laravel 5.5 使用包自动发现,因此不需要手动添加 ServiceProvider。

'providers' => [
    // ...
    LuizHenriqueFerreira\LaravelAcl\LaravelAclServiceProvider::class,
    // ...
],
  1. 运行迁移
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 许可证。