muan/laravel-acl

Laravel 的 ACL 包

1.3 2020-03-10 10:52 UTC

This package is auto-updated.

Last update: 2024-09-10 20:51:07 UTC


README

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

要求

  • PHP >=7.0

安装

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

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

'providers' => [
    // ...
    Muan\Acl\AclServiceProvider::class,
    // ...
],
  1. 运行迁移
php artisan migrate

用法

在您的用户模型上使用以下特质

// ...

use Muan\Acl\Traits\{HasRolesTrait, HasPermissionsTrait};
 
class User extends Authenticatable
{
    use HasRolesTrait, HasPermissionsTrait;
    
    // ... Your User Model Code
}

使用观察者

要在注册后绑定基础角色到用户,您可以指定一个公共属性 $baseRole。

例如

class User extends Authenticatable
{
    // ...
    
    /**
     * Attach base role
     */
    public $baseRole = 'user';
    
    // ...
}

在代码中使用

检查角色

if ($user->hasRole('admin')) {
    // User is admin
}
// or
if ($user->hasRole('admin', 'writer')) {
    // User is admin or writer
}

附加角色

$user->attachRole(10, "moderator")

相同的函数,移除角色

$user->detachRole('moder');
// ...
$user->detachRole('admin', '3', '2');

清除所有角色

$user->clearRoles();

检查权限

if ($user->hasPermission('create post')) {
    // User has permission "create post"
}

附加权限

$user->attachPermission("update post");

移除权限

$user->detachPermission("remove post");

清除所有权限

$user->clearPermissions();

查看代码获取更多信息... =)

用于操作的命令

权限

创建新权限

php artisan permission:add "create post"

重命名权限

php artisan permission:rename "create post" create.post

删除权限

php artisan permission:remove "create post"

显示所有权限

php artisan permission:list

角色

创建新角色

php artisan role:add admin

重命名角色

php artisan role:rename admin superuser

删除角色

php artisan role:remove admin

查看所有角色

php artisan role:list

将权限附加到角色

php artisan role:attach admin --id=2 --id=3 --name="create post"

从角色中移除权限

php artisan role:detach admin --id=3 --name="destroy user"

清除所有附加权限

php artisan role:clear

查看角色信息并显示所有附加权限

php artisan role:view admin

用户

附加角色

php artisan user:role-attach 5 --id=2 --name=moderator

移除角色

php artisan user:role-detach 5 --id=2 --name=admin

从用户中移除所有角色

php artisan user:role-clear

附加权限

php artisan user:permission-attach 5 --id=7 --name="remove comment"

移除权限

php artisan user:permission-detach 5 --id=2 --name="read secret post"

从用户中移除所有权限

php artisan user:permission-clear

查看用户信息,所有附加角色和权限

php artisan user:view 5

其中 5 是用户的 ID。

使用 blade 指令

您还可以使用指令来验证当前登录用户是否有任何角色或权限。

检查角色

@role('admin')
   <!-- User has role admin -->
@elserole('writer')   
   <!-- User has role writer -->
   <!-- ... -->
@else
   <!-- User with other roles -->
@endrole

或在一个指令中检查更多角色

 @role(['admin', 'writer'])
    <!-- User has next roles: admin, writer -->
 @endrole

检查权限

@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: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
    });
    
});

许可

Muan Laravel Acl 包采用 MIT 许可证