$this->assignRolePermission($params, $id), 'model' => $this->assignModelPermission($params, $id), default => self::error('PARAMS_TYPE_ERROR', Response::HTTP_UNPROCESSABLE_ENTITY) }; } /** * @throws ApiException */ public function assignRolePermission($params, $id): void { $params['guard_name'] = $params['guard_name'] ?? Guard::getDefaultName(static::class); // 获取角色 $role = Role::findById($id);// query()->where('guard_name', $params['guard_name'])->find($id); !$role && self::error('ROLE_NOT_EXISTS', Response::HTTP_UNPROCESSABLE_ENTITY); // 清空菜单与角色的关联 $menus = $role->menus; foreach ($menus as $menu) { $menu->removeRole($role->name); } // 添加菜单与角色的关联 $syncMenus = Menu::query()->whereIn('id', $params['permission'])->get(); $permissions = collect([]); foreach ($syncMenus as $menu) { // 添加菜单与角色的关联 $menu->assignRole($role); // 获取菜单权限 if (!$menu->permissions->isEmpty()) $permissions = $permissions->merge($menu->permissions); } // 给角色添加多个权限 $role->syncPermissions($permissions); // 记录操作日志上下文 // LogRecordContext.putVariable("role", role); // return role.getId(); } public function assignModelPermission($params, $id) { } public function getPermissions(int $id, string $class) { $classInstance = app($class); // 角色类型 if ($class === Role::class) { $role = $classInstance::findById($id); return $role->menus->pluck('id'); } return []; } // 获取用户角色 public function getUserRoles(int $id): Collection { return User::query()->find($id)->roles->pluck('id'); } // 分配用户角色 public function assignUserRole(array $data): void { $user = User::query()->find($data['userId']); $user->roles()->sync($data['roleIds']); } }