stanfortonski/laravel-roles

Laravel应用的用户角色。兼容Laravel 7.x和8.x。

v3.1.0 2021-05-13 07:48 UTC

This package is auto-updated.

Last update: 2024-09-18 16:30:46 UTC


README

Laravel应用的用户角色。兼容Laravel 7.x和8.x。

信息

此包提供了一组中间件、迁移、指令和方法,用于用户模型,您可以使用这些功能构建具有不同类型用户的Laravel应用。您可以为例如管理员或访客阻止或允许使用应用的部分功能。

安装

  1. 首先下载包 composer require stanfortonski/laravel-roles
  2. 设置提供者。在config/app.php中,将以下代码添加到提供者列表的底部
'providers' => [
    //...
    Stanfortonski\Laravelroles\ServiceProvider::class
],
  1. 设置中间件。在app/Http/Kernel.php中,将以下代码添加到中间件列表的底部
protected $routeMiddleware = [
    //...
    'role' => \Stanfortonski\Laravelroles\Middleware\Role::class,
    'roles' => \Stanfortonski\Laravelroles\Middleware\OneOfRoles::class,
    'allofroles' => \Stanfortonski\Laravelroles\Middleware\AllOfRoles::class
];
  1. 在User类中使用三个特质之一:HasRoles、HasRolesIds或HasRolesIdsAdapter。示例:use HasRoles;use HasRolesIds;use HasRolesIdsAdapter;
  2. 另外,您可以发布config文件roles.php。运行命令:php artisan vendor:publish --provider="Stanfortonski\Laravelroles\ServiceProvider"

用法

更多关于特质HasRoles、HasRolesIds或HasRolesIdsAdapter的信息。

  • HasRoles基于名称的角色。默认方式。

  • HasRolesIds基于id的角色(方法后缀是ById或ByIds)。HasRolesIds实际上是为了与HasRoles结合使用。

  • HasRolesIdsAdapter基于id的角色,但方法与HasRoles特质中的方法完全相同。它是为了独立使用,不与HasRolesIds或HasRoles结合使用。这样做的目的是中间件和指令不与HasRoleIds方法一起工作。

  • 对于HasRolesIds,您必须使用后缀ByIds表示多个,或ById表示单个。参数传递整数或整数数组。示例:$user->hasRoleById(1)而不是$user->hasRole('nameofrole')

  • 对于HasRolesIdsAdapter,您不需要使用后缀,但参数必须传递整数或整数数组。示例:$user->hasRole(1)而不是$user->hasRole('nameofrole')

中间件

如果您想确定哪些用户可以使用链接,您需要使用以下三个中间件之一:roles、roles、allofroles。

示例:(注意您必须在定义admin、moderator和writer角色之前!查看示例。)

  1. 只有管理员可以访问主页。
    Route::get('/', function () {
        return view('welcome');
    })->middleware('role:admin');
  1. 只有管理员或管理员可以访问主页。
    Route::get('/', function () {
        return view('welcome');
    })->middleware('roles:admin|moderator');
  1. 只有具有管理员和作者角色(所有这些)的用户可以访问主页。
    Route::get('/', function () {
        return view('welcome');
    })->middleware('allofroles:admin|writer');

检查用户是否有角色

    $result = $user->hasRole('admin');
    $result = $user->hasOneOfRoles(['admin', 'mod']);
    $result = $user->hasAllOfRoles(['admin', 'mod']);

添加角色

    $user->addRole('admin');
    $user->addRoles(['admin', 'writer']);

删除角色

    $user->removeRole('admin');
    $user->removeRoles(['admin', 'mod']);

播种

如果您想定义自己的角色,请运行此命令 php artisan make:seeder RoleSeeder,然后复制并粘贴以下代码到database/seeders/RoleSeeder.php。

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class RoleSeeder extends Seeder
{
    private $roles = [
        ['name' => 'admin', 'description' => 'User friendly text'], //role I
        //... next role
    ];

    public function run()
    {
        foreach ($this->roles as $role){
            DB::table('roles')->insert($role);
        }
    }
}

然后运行 composer dump-autoloadphp artisan migrate --seed