laravel8.5与layuiadmin整合(12)
57.给角色分配权限
/app/Http/Controllers/Admin/RoleController.php
添加
/** * 编辑角色的权限 * @param Request $request * @param $id * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function permission(Request $request, $id) { $role = Role::findOrFail($id); $permissions = $this->tree(); foreach ($permissions as $key1 => $item1){ $permissions[$key1]['own'] = $role->hasPermissionTo($item1['id']) ? 'checked' : false ; if (isset($item1['_child'])){ foreach ($item1['_child'] as $key2 => $item2){ $permissions[$key1]['_child'][$key2]['own'] = $role->hasPermissionTo($item2['id']) ? 'checked' : false ; if (isset($item2['_child'])){ foreach ($item2['_child'] as $key3 => $item3){ $permissions[$key1]['_child'][$key2]['_child'][$key3]['own'] = $role->hasPermissionTo($item3['id']) ? 'checked' : false ; } } } } } return view('admin.role.permission',compact('role','permissions')); } /** * 更新角色的权限 * @param Request $request * @param $id * @return \Illuminate\Http\RedirectResponse */ public function assignPermission(Request $request, $id) { $role = Role::findOrFail($id); $permissions = $request->get('permissions'); if(empty($permissions)) { $role->permissions()->detach(); return redirect()->to(route('admin.role'))->with(['status'=>'已更新角色权限1']); }else{ $role->syncPermissions($permissions); return redirect()->to(route('admin.role'))->with(['status'=>'已更新角色权限2']); } }
58.新增上面的模板
/resources/views/admin/role/permission.blade.php
@extends('admin.base') @section('content')class="layui-card">@endsection @section('script') @endsectionclass="layui-card-header layuiadmin-card-header-auto">class="layui-btn-group "> class="layui-btn layui-btn-sm" href="{{ route('admin.permission.create') }}">添 加class="layui-card-body">
59.开发给用户角色和权限,路由添加
// 系统管理 Route::group(['prefix' => 'admin','middleware' => 'auth'],function() { // // 给人员分配角色 Route::get('user/{id}/role',[App\Http\Controllers\Admin\UserController::class, 'role']) ->name('admin.user.role'); Route::put('user/{id}/assignRole',[App\Http\Controllers\Admin\UserController::class, 'assignRole']) ->name('admin.user.assignRole'); // 给人员分配权限 Route::get('user/{id}/permission',[App\Http\Controllers\Admin\UserController::class, 'permission']) ->name('admin.user.permission'); Route::put('user/{id}/assignPermission',[App\Http\Controllers\Admin\UserController::class, 'assignPermission']) ->name('admin.user.assignPermission'); });
60.添加角色模型
/app/Models/Role.php
namespace App\Models; class Role extends \Spatie\Permission\Models\Role { }
61.添加角色关联
/app/Models/User.php
添加 HasRoles,如下
class User extends Authenticatable { // use HasApiTokens, HasFactory, Notifiable, HasRoles; // }
62.控制器添加方法
/app/Http/Controllers/Admin/UserController.php
/** * 获取用户的角色 * @param Request $request * @param $id * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function role(Request $request, $id) { $user = User::findOrFail($id); $roles = Role::get(); foreach ($roles as $role) { $role->own = $user->hasRole($role) ? true : false; } return view('admin.user.role',compact('roles','user')); } /** * 处理编辑用户后的角色 * @param Request $request * @param $id * @return \Illuminate\Http\RedirectResponse */ public function assignRole(Request $request, $id) { $user = User::findOrFail($id); $roles = $request->get('roles',[]); if($user->syncRoles($roles)) { return redirect()->to(route('admin.user'))->with(['status'=>'更新用户角色成功']); } return redirect()->to(route('admin.user'))->withErrors(['status'=>'系统错误']); } /** * 获取用户拥有的权限 * @param Request $request * @param $id * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function permission(Request $request, $id) { $user = User::findOrFail($id); $permissions = $this->tree(); foreach ($permissions as $key1 => $item1){ $permissions[$key1]['own'] = $user->hasDirectPermission($item1['id']) ? 'checked' : false ; if (isset($item1['_child'])){ foreach ($item1['_child'] as $key2 => $item2){ $permissions[$key1]['_child'][$key2]['own'] = $user->hasDirectPermission($item2['id']) ? 'checked' : false ; if (isset($item2['_child'])){ foreach ($item2['_child'] as $key3 => $item3){ $permissions[$key1]['_child'][$key2]['_child'][$key3]['own'] = $user->hasDirectPermission($item3['id']) ? 'checked' : false ; } } } } } return view('admin.user.permission',compact('user','permissions')); } /** * 处理编辑用户的权限 * @param Request $request * @param $id * @return \Illuminate\Http\RedirectResponse */ public function assignPermission(Request $request, $id) { $user = User::findOrFail($id); $permissions = $request->get('permissions'); if (empty($permissions)){ $user->permissions()->detach(); return redirect()->to(route('admin.user'))->with(['status'=>'已更新用户直接权限']); } $user->syncPermissions($permissions); return redirect()->to(route('admin.user'))->with(['status'=>'已更新用户直接权限']); }