4msar/laravel-role-manager

Laravel 角色管理器。

v1.0.1 2019-05-20 10:03 UTC

This package is auto-updated.

Last update: 2024-09-20 22:13:37 UTC


README

安装

此包可用于 Laravel 5.4 或更高版本。您可以通过 composer 安装此包。

composer require 4msar/laravel-role-manager

在 Laravel 5.5 中,服务提供者将自动注册。在框架的旧版本中,只需将服务提供者添加到 config/app.php 文件中。

'providers' => [
    // ...
    MSAR\RoleManager\RoleManagerServiceProvider::class,
];

您可以使用以下命令发布迁移和配置文件:

php artisan vendor:publish --provider="MSAR\RoleManager\RoleManagerServiceProvider"

迁移发布后,您可以通过运行迁移来创建角色和权限表。

php artisan migrate

发布时,config/role_manager.php 配置文件包含以下内容:

return [

    /**
    * Permission List 
    * Here, you can declare your needed permission, the package will be add this permission automatically
    * to the database( via middle-ware).
    * key name is the permission name and value is the details name showing for management.
    */
    "add_permission_dynamically" => false, // Make true if you want to add permission from bellow permissions array
    "permissions" => [
        // 'permission_name' => 'permission_details'
        'view_home' => 'View Admin Dashboard',
        'view_users' => 'View Admin Users',
    ],

    'unauthorized_action' => '',

    'unauthorized_action_type' =>  [
        'route' => [
            'name' => 'welcome',
            'data' => [],
        ],
        'url' => [
            'name' => '/login',
            'data' => [],
        ],
        'abort' => [
            'type' => '403',
        ],
        'dump' => [
            'data' => 'Dumping a unauthorized message.',
        ]
    ],

    "database" => [
        "role_table" => "roles",
        "permission_table" => "permissions",
        "role_permission_table" => "permission_role",
    ],
];

使用

首先,将 MSAR\RoleManager\Traits\HasPermission; 特性添加到您的 User 模型中。

use Illuminate\Foundation\Auth\User as Authenticatable;
use MSAR\RoleManager\Traits\HasPermission;;

class User extends Authenticatable
{
    use HasPermission;

    // ...
}

然后,将 \MSAR\RoleManager\Middlewares\RoleMiddleware::class 中间件添加到您的 Karnel.php 中。

// .....
'has_permission' => \MSAR\RoleManager\Middlewares\RoleMiddleware::class,

注意:您必须在用户表中添加一个名为 role 的列,并将用户的角色保存到此列。

此包允许将用户与权限和角色关联起来。每个角色都与多个权限相关联。角色和权限是常规的 Eloquent 模型。它们需要一个 name,可以像这样创建:

use MSAR\RoleManager\Models\Role;
use MSAR\RoleManager\Models\Permission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit_articles', 'title' => 'Edit Articles']);

要创建权限,您可以使用 config/role_manager.php 文件和 permissions 数组。只需将配置值 add_permission_dynamically 设置为 true,然后将权限添加到数组(permissions)中。

要从前端更新角色和权限,请使用以下代码

$role = \MSAR\RoleManager\Models\Role::where('name', 'Admin')->first();
$permissions = $request->permissions; // [1,2] | checkbox array input | permissions ids
$role->permissions()->sync($permissions);

要检查用户是否有权限,请将中间件添加到路由中

Route::get('/users', 'UserController@index')->middleware('has_permission:view_users')->name('home');

您可以使用多个权限,方法是用管道符(|)分隔,例如:has_permission:view_users|update_users

使用 Blade 指令 您可以使用这些 blade 扩展:具有角色:具有角色

@hasrole(role)
@elsehasrole(another_role)
@endhasrole

具有权限:用户可以

@ucan(permission)
@elseucan(another_permission)
@enducan

使用辅助函数

rmHasRole($role); // pipe string | array | string
rmHasPermission($permission); // pipe string | array | string

待办事项

  • 改进代码库
  • 添加命令以添加角色或分配权限