feat: 修改权限功能

This commit is contained in:
siujamo
2025-12-31 17:00:45 +08:00
parent 9b8d276e0b
commit a5da09cf09
11 changed files with 74 additions and 18 deletions
@@ -1,6 +1,6 @@
package com.onixbyte.helix.controller; package com.onixbyte.helix.controller;
import com.onixbyte.helix.domain.web.request.UsernamePasswordLoginRequest; import com.onixbyte.helix.domain.web.request.LoginRequest;
import com.onixbyte.helix.domain.web.response.LoginSuccessResponse; import com.onixbyte.helix.domain.web.response.LoginSuccessResponse;
import com.onixbyte.helix.service.AuthService; import com.onixbyte.helix.service.AuthService;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -29,7 +29,7 @@ public class AuthController {
*/ */
@PostMapping("/login") @PostMapping("/login")
public LoginSuccessResponse loginWithUsernameAndPassword( public LoginSuccessResponse loginWithUsernameAndPassword(
@Validated @RequestBody UsernamePasswordLoginRequest request @Validated @RequestBody LoginRequest request
) { ) {
return authService.login(request); return authService.login(request);
} }
@@ -2,6 +2,7 @@ package com.onixbyte.helix.controller;
import com.onixbyte.helix.domain.entity.Authority; import com.onixbyte.helix.domain.entity.Authority;
import com.onixbyte.helix.domain.web.request.AddAuthorityRequest; import com.onixbyte.helix.domain.web.request.AddAuthorityRequest;
import com.onixbyte.helix.domain.web.request.EditAuthorityRequest;
import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest; import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest;
import com.onixbyte.helix.service.AuthorityService; import com.onixbyte.helix.service.AuthorityService;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@@ -36,4 +37,9 @@ public class AuthorityController {
public Authority addAuthority(@Validated @RequestBody AddAuthorityRequest request) { public Authority addAuthority(@Validated @RequestBody AddAuthorityRequest request) {
return authorityService.addAuthority(request); return authorityService.addAuthority(request);
} }
@PutMapping
public Authority editAuthority(@Validated @RequestBody EditAuthorityRequest request) {
return authorityService.editAuthority(request);
}
} }
@@ -3,7 +3,7 @@ package com.onixbyte.helix.controller;
import com.onixbyte.helix.domain.web.request.AddUserRequest; import com.onixbyte.helix.domain.web.request.AddUserRequest;
import com.onixbyte.helix.domain.web.request.QueryUserRequest; import com.onixbyte.helix.domain.web.request.QueryUserRequest;
import com.onixbyte.helix.domain.web.request.ResetPasswordRequest; import com.onixbyte.helix.domain.web.request.ResetPasswordRequest;
import com.onixbyte.helix.domain.web.request.UpdateUserRequest; import com.onixbyte.helix.domain.web.request.EditUserRequest;
import com.onixbyte.helix.domain.web.response.UserDetailResponse; import com.onixbyte.helix.domain.web.response.UserDetailResponse;
import com.onixbyte.helix.service.UserService; import com.onixbyte.helix.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -64,7 +64,7 @@ public class UserController {
} }
@PutMapping @PutMapping
public ResponseEntity<Void> editUser(@Validated @RequestBody UpdateUserRequest request) { public ResponseEntity<Void> editUser(@Validated @RequestBody EditUserRequest request) {
userService.updateUser(request); userService.updateUser(request);
return ResponseEntity.ok(null); return ResponseEntity.ok(null);
} }
@@ -0,0 +1,14 @@
package com.onixbyte.helix.domain.web.request;
import jakarta.validation.constraints.Pattern;
public record EditAuthorityRequest(
Long id,
String name,
String description,
@Pattern(
regexp = "^(ACTIVE|INACTIVE)?$",
message = "状态参数错误")
String status
) {
}
@@ -4,7 +4,7 @@ import com.onixbyte.helix.enumeration.UserStatus;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.Positive;
public record UpdateUserRequest( public record EditUserRequest(
@NotNull(message = "User ID cannot be null") @NotNull(message = "User ID cannot be null")
@Positive(message = "User ID must be positive") @Positive(message = "User ID must be positive")
Long id, Long id,
@@ -0,0 +1,17 @@
package com.onixbyte.helix.domain.web.request;
/**
* Login data.
*
* @param username username
* @param password password
* @param uuid captcha uuid
* @param captcha captcha code
*/
public record LoginRequest(
String username,
String password,
String uuid,
String captcha
) {
}
@@ -1,9 +0,0 @@
package com.onixbyte.helix.domain.web.request;
public record UsernamePasswordLoginRequest(
String username,
String password,
String uuid,
String captcha
) {
}
@@ -2,6 +2,9 @@ package com.onixbyte.helix.manager;
import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper; import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper;
import com.onixbyte.helix.domain.entity.Authority; import com.onixbyte.helix.domain.entity.Authority;
import com.onixbyte.helix.domain.web.request.EditAuthorityRequest;
import com.onixbyte.helix.enumeration.Status;
import com.onixbyte.helix.exception.BizException;
import com.onixbyte.helix.mapper.AuthorityMapper; import com.onixbyte.helix.mapper.AuthorityMapper;
import com.onixbyte.helix.repository.AuthorityRepository; import com.onixbyte.helix.repository.AuthorityRepository;
import com.onixbyte.helix.shared.CacheName; import com.onixbyte.helix.shared.CacheName;
@@ -12,9 +15,12 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Example; import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional;
@Component @Component
public class AuthorityManager { public class AuthorityManager {
@@ -49,4 +55,21 @@ public class AuthorityManager {
public Authority save(Authority authority) { public Authority save(Authority authority) {
return authorityRepository.save(authority); return authorityRepository.save(authority);
} }
@Transactional
public Authority update(EditAuthorityRequest request) {
var authority = authorityRepository.findById(request.id())
.orElseThrow(() -> new BizException(HttpStatus.NOT_FOUND, "找不到指定的权限信息"));
Optional.ofNullable(request.name())
.ifPresent(authority::setName);
authority.setDescription(request.description());
Optional.ofNullable(request.status())
.map(Status::valueOf)
.ifPresent(authority::setStatus);
return authority;
}
} }
@@ -3,7 +3,7 @@ package com.onixbyte.helix.service;
import com.onixbyte.helix.client.TokenClient; import com.onixbyte.helix.client.TokenClient;
import com.onixbyte.helix.shared.SettingName; import com.onixbyte.helix.shared.SettingName;
import com.onixbyte.helix.domain.entity.Setting; import com.onixbyte.helix.domain.entity.Setting;
import com.onixbyte.helix.domain.web.request.UsernamePasswordLoginRequest; import com.onixbyte.helix.domain.web.request.LoginRequest;
import com.onixbyte.helix.domain.web.response.LoginSuccessResponse; import com.onixbyte.helix.domain.web.response.LoginSuccessResponse;
import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.exception.BizException;
import com.onixbyte.helix.manager.CaptchaManager; import com.onixbyte.helix.manager.CaptchaManager;
@@ -49,7 +49,7 @@ public class AuthService {
* @return user information and user identity token * @return user information and user identity token
* @throws BizException if the user does not exist, or the username and password are incorrect * @throws BizException if the user does not exist, or the username and password are incorrect
*/ */
public LoginSuccessResponse login(UsernamePasswordLoginRequest request) { public LoginSuccessResponse login(LoginRequest request) {
var captchaEnabled = Optional.ofNullable(settingManager.getSettingByName(SettingName.CAPTCHA_ENABLED)) var captchaEnabled = Optional.ofNullable(settingManager.getSettingByName(SettingName.CAPTCHA_ENABLED))
.map(Setting::asBoolean) .map(Setting::asBoolean)
.orElse(false); .orElse(false);
@@ -3,6 +3,7 @@ package com.onixbyte.helix.service;
import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper; import com.onixbyte.helix.domain.database.query.wrapper.QueryAuthorityWrapper;
import com.onixbyte.helix.domain.entity.Authority; import com.onixbyte.helix.domain.entity.Authority;
import com.onixbyte.helix.domain.web.request.AddAuthorityRequest; import com.onixbyte.helix.domain.web.request.AddAuthorityRequest;
import com.onixbyte.helix.domain.web.request.EditAuthorityRequest;
import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest; import com.onixbyte.helix.domain.web.request.QueryAuthorityRequest;
import com.onixbyte.helix.enumeration.Status; import com.onixbyte.helix.enumeration.Status;
import com.onixbyte.helix.exception.BizException; import com.onixbyte.helix.exception.BizException;
@@ -45,4 +46,8 @@ public class AuthorityService {
return authorityManager.save(authority); return authorityManager.save(authority);
} }
public Authority editAuthority(EditAuthorityRequest request) {
return authorityManager.update(request);
}
} }
@@ -9,7 +9,7 @@ import com.onixbyte.helix.domain.entity.UserRole;
import com.onixbyte.helix.domain.web.request.AddUserRequest; import com.onixbyte.helix.domain.web.request.AddUserRequest;
import com.onixbyte.helix.domain.web.request.QueryUserRequest; import com.onixbyte.helix.domain.web.request.QueryUserRequest;
import com.onixbyte.helix.domain.web.request.ResetPasswordRequest; import com.onixbyte.helix.domain.web.request.ResetPasswordRequest;
import com.onixbyte.helix.domain.web.request.UpdateUserRequest; import com.onixbyte.helix.domain.web.request.EditUserRequest;
import com.onixbyte.helix.domain.web.response.UserDetailResponse; import com.onixbyte.helix.domain.web.response.UserDetailResponse;
import com.onixbyte.helix.manager.ApplicationManager; import com.onixbyte.helix.manager.ApplicationManager;
import com.onixbyte.helix.manager.RoleManager; import com.onixbyte.helix.manager.RoleManager;
@@ -134,7 +134,7 @@ public class UserService {
} }
@Transactional(rollbackFor = Throwable.class) @Transactional(rollbackFor = Throwable.class)
public void updateUser(UpdateUserRequest request) { public void updateUser(EditUserRequest request) {
userManager.updateUser(User.builder() userManager.updateUser(User.builder()
.id(request.id()) .id(request.id())
.fullName(request.fullName()) .fullName(request.fullName())