stanfortonski / laravel-roles
Laravel应用的用户角色。兼容Laravel 7.x和8.x。
Requires
- php: >=7.2
README
Laravel应用的用户角色。兼容Laravel 7.x和8.x。
信息
此包提供了一组中间件、迁移、指令和方法,用于用户模型,您可以使用这些功能构建具有不同类型用户的Laravel应用。您可以为例如管理员或访客阻止或允许使用应用的部分功能。
安装
- 首先下载包
composer require stanfortonski/laravel-roles
。 - 设置提供者。在config/app.php中,将以下代码添加到提供者列表的底部
'providers' => [ //... Stanfortonski\Laravelroles\ServiceProvider::class ],
- 设置中间件。在app/Http/Kernel.php中,将以下代码添加到中间件列表的底部
protected $routeMiddleware = [ //... 'role' => \Stanfortonski\Laravelroles\Middleware\Role::class, 'roles' => \Stanfortonski\Laravelroles\Middleware\OneOfRoles::class, 'allofroles' => \Stanfortonski\Laravelroles\Middleware\AllOfRoles::class ];
- 在User类中使用三个特质之一:HasRoles、HasRolesIds或HasRolesIdsAdapter。示例:
use HasRoles;
、use HasRolesIds;
或use HasRolesIdsAdapter;
。 - 另外,您可以发布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角色之前!查看示例。)
- 只有管理员可以访问主页。
Route::get('/', function () { return view('welcome'); })->middleware('role:admin');
- 只有管理员或管理员可以访问主页。
Route::get('/', function () { return view('welcome'); })->middleware('roles:admin|moderator');
- 只有具有管理员和作者角色(所有这些)的用户可以访问主页。
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-autoload
和 php artisan migrate --seed
。