enclave-code/static-auth-manager

静态管理Laravel中的角色和权限

v1.0.1 2020-03-31 03:57 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)。有关更多信息,请参阅 许可证文件