内容简介:您可以通过 composer 安装软件包:在发布迁移
您可以通过 composer 安装软件包:
composer require spatie/laravel-permission 复制代码
在 config/app.php
文件中添加服务提供者:
'providers' => [ // ... Spatie\Permission\PermissionServiceProvider::class, ]; 复制代码
发布迁移
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations" 复制代码
迁移生成表
php artisan migrate 复制代码
roles
角色表
permissions
权限表
role_has_permissions
角色权限表
model_has_roles
用户角色表,用户通过角色获取权限使用
model_has-permissions
用户权限表,用户直接获取权限使用
发布配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config" 复制代码
配置
config/permission.php
如果自定义role和permission模型,需要分别继承 Spatie\Permission\Models\Permission
和 Spatie\Permission\Models\Role
,并修改配置文件models.role和models.permisssion
return [ 'models' => [ /* * 当使用这个包中的 “HasRoles” 特性时,我们需要知道应该 * 使用哪个 Eloquent 模型来获取您的权限。 * 当然,它通常只是“权限(Permission)”模型,你也可以使用任何你喜欢的模型。 * * 您使用的权限模型必须实现 * `Spatie\Permission\Contracts\Permission` 契约。 */ 'permission' => \App\Models\Permission::class, /* * 当使用这个包中的 “HasRoles” 特性时, * 我们需要知道应该使用哪个 Eloquent 模型来检索你的角色。 * 当然,它通常只是 “角色(Role)” 模型,你也可以使用任何你喜欢的模型。 * * 您使用的权限模型必须实现 * `Spatie\Permission\Contracts\Role` 契约。 */ 'role' => \App\Models\Role::class, ], .... ] 复制代码
Models/role.php
use Spatie\Permission\Models\Role as SpatieRole; class Role extends SpatieRole { } 复制代码
Models/permission.php
use Spatie\Permission\Models\Permission as SpatiePermission; class Permission extends SpatiePermission { } 复制代码
将 Spatie\Permission\Traits\HasRoles 特征添加到您的 User 模型中:
class User extends Authenticatable { use HasRoles; // ... } 复制代码
权限验证
Middleware/VerifyPermissions.php
创建中间件
public function handle($request, Closure $next) { $route = $request->decodedPath(); $user = $request->user(); if (!$user->hasPermissionTo($route)) { return response()->json([ 'code' => 1001, 'message' => "No authority", ], 401); }; return $next($request); } 复制代码
注册路由中间件
protected $routeMiddleware = [ ... 'role' => \App\Http\Middleware\VerifyPermissions::class ]; 复制代码
路由使用中间件
Route::middleware('role')->group(function () { }); 复制代码
参考代码
添加角色权限
public function addRoleAndPermissions($data) { $role = Role::create(['name' => $data['name']]); $permissionNames = $this->permissionModel->getPermissionColumn('name'); foreach ($data['permissions'] as $permission) { if (in_array($permission, $permissionNames)) { $role->givePermissionTo($permission); } else { $permission = Permission::create(['name' => $permission]); $role->givePermissionTo($permission); } } } 复制代码
添加多个角色权限
public function updateRolesAndPermissions($datas) { foreach ($datas as $roleId => $permissions) { $this->addNotExistPermission($permissions); $role = Role::findById($roleId); $rolePermissionNames = array_column($role->permissions()->get()->toArray(), 'name'); $addRolePermissions = array_diff($permissions, $rolePermissionNames); $delRolePermissions = array_diff($rolePermissionNames, $permissions); $role->givePermissionTo($addRolePermissions); $role->revokePermissionTo($delRolePermissions); } } public function addNotExistPermission($permissions) { $permissionNames = $this->permissionModel->getPermissionColumn('name'); $addPermissions = array_diff($permissions, $permissionNames); foreach ($addPermissions as $permission) { Permission::create(['name' => $permission]); } } 复制代码
用户添加角色
$user = $this->userModel::where('name', $userData['name'])->first(); $user->assignRole($roleId); 复制代码
获取用户的角色
$role = $user->getRoleNames(); 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring-Security权限管理框架(1)——根据角色权限登录
- Tangdao 2.0.1 发布,更新前后分离,完成基础角色权限,数据权限组件
- SQL Server中通用数据库角色权限处理
- RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置
- spring-boot-plus V1.4.0发布,集成用户角色权限部门管理
- ansible笔记(42):角色
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。