id; } /** * @throws ApiException */ public function updateRole(array $params, int $id): bool|int { $params['guard_name'] = $params['guard_name'] ?? Guard::getDefaultName(static::class); // 校验是否可以更新 $role = self::validateRoleForUpdate($id); // 校验角色名称是否重复 self::validateRoleDuplicate($params['name'], $params['guard_name'], $id); // 更新到数据库 return $role->update([...$params, 'id' => $id]); // 记录操作日志上下文 } public function deleteRole($id): ?bool { // 1. 校验是否可以更新 $role = self::validateRoleForUpdate($id); // 2.1 标记删除 return $role->delete(); // 2.2 删除相关数据 // permissionService.processRoleDeleted(id); // 3. 记录操作日志上下文 // LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(role, RoleSaveReqVO.class)); // LogRecordContext.putVariable("role", role); } public function getRoleList($data): array { $role = Role::query(); isset($data['name']) && $role->whereLike('name', "%{$data['name']}%"); isset($data['status']) && $role->where('status', $data['status']); $rolePage = $role->orderBy('sort')->paginate($data['pageSize'], ['*'], 'page', $data['pageNo']); return ['list' => $rolePage->items(), 'total' => $rolePage->total()]; } // public function getRolePermissions($id) // { // $role = Role::findById($id); // return $role->getAllPermissions()->pluck('id'); // } /** * 校验角色的唯一字段是否重复 * * 1. 是否存在相同名字的角色 * 2. 是否存在相同编码的角色 * * @param String $name 角色名字 * @param String $guard_name * @param int $id 角色编号 * @throws ApiException */ public static function validateRoleDuplicate(string $name, string $guard_name, int $id = 0): void { // 0. 超级管理员,不允许创建 // if (RoleCodeEnum.isSuperAdmin(code)) { // throw exception(ROLE_ADMIN_CODE_ERROR, code); // } // 1. 该 name 名字被其它角色所使用 $role = self::selectByName($name, $guard_name); $role && $role->id !== $id && self::error('ROLE_NAME_DUPLICATE', Response::HTTP_UNPROCESSABLE_ENTITY); } public static function validateRoleForUpdate($id): Role { $role = Role::findById($id); // throw exception(ROLE_NOT_EXISTS); // 内置角色,不允许删除 // if (RoleTypeEnum.SYSTEM.getType().equals(role.getType())) { // throw exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); // } return $role; } protected static function selectByName($name, $guard_name = null) { $attributes = ['name' => $name]; $attributes['guard_name'] = $guard_name ?? config('auth.defaults.guard'); return Role::query()->where($attributes)->first(); } }