新增系统管理员岗位
This commit is contained in:
@@ -12,6 +12,7 @@ import com.labelsys.backend.common.exception.BusinessException;
|
||||
import com.labelsys.backend.common.exception.ForbiddenException;
|
||||
import com.labelsys.backend.context.LoginUser;
|
||||
import com.labelsys.backend.dto.request.CreateCompanyAdminRequest;
|
||||
import com.labelsys.backend.dto.request.CreateSystemEngineerAdminRequest;
|
||||
import com.labelsys.backend.dto.request.CreateUserRequest;
|
||||
import com.labelsys.backend.dto.request.UpdateUserAssignmentRequest;
|
||||
import com.labelsys.backend.dto.request.UpdateUserStatusRequest;
|
||||
@@ -39,6 +40,12 @@ public class UserService {
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
private final TokenSessionRepository tokenSessionRepository;
|
||||
|
||||
public List<SysUser> listAllUsers(LoginUser currentUser) {
|
||||
assertSystemAdmin(currentUser);
|
||||
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<SysUser>().orderByAsc(SysUser::getId);
|
||||
return sysUserMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
public List<SysUser> listCompanyUsers(LoginUser currentUser) {
|
||||
assertCompanyAdmin(currentUser);
|
||||
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<SysUser>()
|
||||
@@ -47,17 +54,32 @@ public class UserService {
|
||||
}
|
||||
|
||||
public List<SysUser> listCompanyAdmins(LoginUser currentUser, Long companyId) {
|
||||
assertPlatformAdmin(currentUser);
|
||||
assertSystemAdmin(currentUser);
|
||||
return sysUserMapper.listCompanyAdmins(companyId);
|
||||
}
|
||||
|
||||
public SysUser createCompanyAdmin(LoginUser currentUser, CreateCompanyAdminRequest request) {
|
||||
assertPlatformAdmin(currentUser);
|
||||
assertSystemAdmin(currentUser);
|
||||
ensureEnabledCompany(request.companyId());
|
||||
return createUser(
|
||||
request.companyId(),
|
||||
new CreateUserRequest(request.phone(), request.username(), request.realName(), UserRole.EMPLOYEE, UserPosition.ADMIN)
|
||||
);
|
||||
return createUser(request.companyId(), new CreateUserRequest(request.phone(), request.username(),
|
||||
request.realName(), UserRole.EMPLOYEE, UserPosition.ADMIN));
|
||||
}
|
||||
|
||||
public SysUser createSystemEngineerAdmin(LoginUser currentUser, CreateSystemEngineerAdminRequest request) {
|
||||
assertSystemAdmin(currentUser);
|
||||
Long systemCompanyId = 1L;
|
||||
ensureEnabledCompany(systemCompanyId);
|
||||
|
||||
if (sysUserMapper.findByCompanyIdAndPhone(systemCompanyId, request.phone()) != null) {
|
||||
throw new BusinessException(ResultCode.CONFLICT, "同一公司内手机号已存在");
|
||||
}
|
||||
|
||||
SysUser user = SysUser.builder().id(IdGenerator.nextId()).companyId(systemCompanyId).phone(request.phone())
|
||||
.username(request.username()).realName(request.realName()).role(UserRole.ENGINEER)
|
||||
.position(UserPosition.SUPER_ADMIN).passwordHash(passwordEncoder.encode(DEFAULT_PASSWORD))
|
||||
.mustChangePassword(true).status(UserStatus.ENABLED).sessionVersion(1).build();
|
||||
sysUserMapper.insert(user);
|
||||
return user;
|
||||
}
|
||||
|
||||
public SysUser createCompanyUser(LoginUser currentUser, CreateUserRequest request) {
|
||||
@@ -66,7 +88,7 @@ public class UserService {
|
||||
}
|
||||
|
||||
public SysUser createCompanyUser(LoginUser currentUser, Long companyId, CreateUserRequest request) {
|
||||
assertPlatformAdmin(currentUser);
|
||||
assertSystemAdmin(currentUser);
|
||||
ensureEnabledCompany(companyId);
|
||||
return createUser(companyId, request);
|
||||
}
|
||||
@@ -90,8 +112,9 @@ public class UserService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updateCompanyAdminStatus(LoginUser currentUser, Long companyId, Long userId, UpdateUserStatusRequest request) {
|
||||
assertPlatformAdmin(currentUser);
|
||||
public void updateCompanyAdminStatus(LoginUser currentUser, Long companyId, Long userId,
|
||||
UpdateUserStatusRequest request) {
|
||||
assertSystemAdmin(currentUser);
|
||||
if (sysUserMapper.updateStatus(userId, companyId, request.status()) == 0) {
|
||||
throw new BusinessException(ResultCode.NOT_FOUND, "用户不存在");
|
||||
}
|
||||
@@ -102,19 +125,10 @@ public class UserService {
|
||||
if (sysUserMapper.findByCompanyIdAndPhone(companyId, request.phone()) != null) {
|
||||
throw new BusinessException(ResultCode.CONFLICT, "同一公司内手机号已存在");
|
||||
}
|
||||
SysUser user = SysUser.builder()
|
||||
.id(IdGenerator.nextId())
|
||||
.companyId(companyId)
|
||||
.phone(request.phone())
|
||||
.username(request.username())
|
||||
.realName(request.realName())
|
||||
.role(request.role())
|
||||
.position(request.position())
|
||||
.passwordHash(passwordEncoder.encode(DEFAULT_PASSWORD))
|
||||
.mustChangePassword(true)
|
||||
.status(UserStatus.ENABLED)
|
||||
.sessionVersion(1)
|
||||
.build();
|
||||
SysUser user = SysUser.builder().id(IdGenerator.nextId()).companyId(companyId).phone(request.phone())
|
||||
.username(request.username()).realName(request.realName()).role(request.role()).position(request.position())
|
||||
.passwordHash(passwordEncoder.encode(DEFAULT_PASSWORD)).mustChangePassword(true).status(UserStatus.ENABLED)
|
||||
.sessionVersion(1).build();
|
||||
sysUserMapper.insert(user);
|
||||
return user;
|
||||
}
|
||||
@@ -126,14 +140,20 @@ public class UserService {
|
||||
}
|
||||
}
|
||||
|
||||
private void assertPlatformAdmin(LoginUser currentUser) {
|
||||
if (!currentUser.isPlatformAdmin()) {
|
||||
throw new ForbiddenException("仅平台管理员可操作");
|
||||
// private void assertPlatformAdmin(LoginUser currentUser) {
|
||||
// if (!currentUser.isPlatformAdmin()) {
|
||||
// throw new ForbiddenException("仅平台管理员可操作");
|
||||
// }
|
||||
// }
|
||||
|
||||
private void assertSystemAdmin(LoginUser currentUser) {
|
||||
if (!currentUser.isSuperAdmin()) {
|
||||
throw new ForbiddenException("仅超级管理员可操作");
|
||||
}
|
||||
}
|
||||
|
||||
private void assertCompanyAdmin(LoginUser currentUser) {
|
||||
if (currentUser.isPlatformAdmin() || currentUser.position() != UserPosition.ADMIN) {
|
||||
if (currentUser.isSuperAdmin() || currentUser.position() != UserPosition.ADMIN) {
|
||||
throw new ForbiddenException("仅公司管理员可操作");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user