| sandu-common/src/main/java/com/sandu/common/enums/RoleLevelStatus.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/param/AdminParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/param/PwdParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
sandu-common/src/main/java/com/sandu/common/enums/RoleLevelStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.sandu.common.enums; /** * @author chenjiantian */ public enum RoleLevelStatus { /** * */ SUPER(1, "è¶ çº§ç®¡çå"), COMMON(2, "æ®é管çå"), ; private final Integer code; private final String message; RoleLevelStatus(Integer code, String message) { this.code = code; this.message = message; } public Integer getCode() { return code; } public String getMessage() { return message; } } ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
@@ -17,8 +17,9 @@ import com.sandu.common.security.token.TokenProvider; import com.sandu.common.util.IpUtil; import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.dto.AdminJwtUser; import com.sandu.ximon.admin.param.AdminLoginParam; import com.sandu.ximon.admin.param.AdminParam; import com.sandu.ximon.admin.param.PwdParam; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.service.AdminService; import com.sandu.ximon.admin.service.MenuService; @@ -30,8 +31,8 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; @@ -39,9 +40,9 @@ import java.util.stream.Collectors; /** * @author hupeng * @date 2018-11-23 * ææãæ ¹æ®tokenè·åç¨æ·è¯¦ç»ä¿¡æ¯ * @author chenjiantian * @date 2022/1/18 16:04 * 管çåæ§å¶ç±» */ @Slf4j @RestController @@ -81,7 +82,7 @@ loginUserInfo.setIp(IpUtil.getRealIp()); loginUserInfo.setAdministratorType(AdministratorEnums.ADMIN.getCode()); loginUserInfo.setPermission(grantedAuthorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(","))); // çæä»¤ç String token = tokenProvider.createToken(loginUserInfo); @@ -104,7 +105,7 @@ Long userId = SecurityUtils.getUserId(); Admin admin = adminService.getById(userId); List<Role> roles = roleService.listByAdminId(admin.getId()); if(CollectionUtil.isEmpty(roles)){ if (CollectionUtil.isEmpty(roles)) { return ResponseUtil.fail("ç¨æ·æ²¡æè§è²ï¼æ æ³è·åæ°æ®"); } List<Menu> menus = menuService.listByRoleIds(roles.stream().map(Role::getId).collect(Collectors.toList())); @@ -130,33 +131,45 @@ return ResponseUtil.successPage(list); } // @PreAuthorize("@el.check('admin:add')") // @PostMapping("/register") // public ResponseVO<Object> register(@Validated @RequestBody AdminParam adminParam) { // Admin admin = adminService.register(adminParam); // return ResponseUtil.success(admin); // } @PostMapping("/register") public ResponseVO<Object> register(@Validated @RequestBody AdminParam param) { boolean result = adminService.register(param); if (result) { return ResponseUtil.success("注åç¨æ·æå"); } else { return ResponseUtil.fail("注åç¨æ·å¤±è´¥"); } } // /** // * ä¿®æ¹ç®¡çåä¿¡æ¯ // * // * @param resources // * @return // */ // @PutMapping("/{id}") // @PreAuthorize("@el.check('admin:edit')") // public ResponseVO<Object> update(@RequestBody AdminParam resources, @PathVariable Long id) { // checkLevel(id); // adminService.updateAdmin(id, resources); // return ResponseUtil.success(null); // } // // @PutMapping("/updatePassword") // public ResponseVO<Object> updatePassword(@Validated @RequestBody PwdParam param) { // Long userId = SecurityUtils.getUserId(); // adminService.updatePassword(userId, param); // return ResponseUtil.success(null); // } /** * ä¿®æ¹ç®¡çåä¿¡æ¯ * */ @PostMapping("/update/{adminId}") public ResponseVO<Object> updateAdmin(@RequestBody AdminParam param, @PathVariable Long adminId) { boolean result = adminService.updateAdmin(adminId, param); if (result) { return ResponseUtil.success("ä¿®æ¹æå"); } else { return ResponseUtil.fail("ä¿®æ¹å¤±è´¥"); } } /** * ä¿®æ¹æçå¯ç * @param param * @return */ @PutMapping("/updateMyPassword") public ResponseVO<Object> updateMyPassword(@Validated @RequestBody PwdParam param) { boolean result = adminService.updateMyPassword(param); if (result) { return ResponseUtil.success("ä¿®æ¹æå"); } else { return ResponseUtil.fail("ä¿®æ¹å¤±è´¥"); } } // @PutMapping("/updateStatus/{id}") // public ResponseVO<Object> updateStatus(@PathVariable Long id, @RequestParam(value = "status") Integer status) { @@ -190,28 +203,6 @@ // return ResponseUtil.success(""); // } /** * 妿å½åç¨æ·çè§è²çº§å«ä½äºåå»ºç¨æ·çè§è²çº§å«ï¼åæåºæéä¸è¶³çé误 * * @param updateId 被æä½äººçid */ private void checkLevel(Long updateId) { Admin admin = adminService.findByUserName(SecurityUtils.getUsername()); // è·åæä½è æå¤§æé Integer currentLevel = Collections.min(roleService.listByAdminId(admin.getId()).stream().map(Role::getLevel).collect(Collectors.toList())); // è·å被ç¼è¾äººçæå¤§æé List<Integer> optList = roleService.listByAdminId(updateId).stream().map(Role::getLevel).collect(Collectors.toList()); // 没æé é便æä½ if (CollectionUtil.isEmpty(optList)) { return; } Integer optLevel = Collections.min(optList); if (optLevel != null) { if (currentLevel > optLevel) { throw new BusinessException("æéä¸è¶³ï¼ä½ çè§è²çº§å«ï¼" + currentLevel + "ï¼ä½äºæä½çè§è²çº§å«ï¼" + optLevel); } } } // /** // * ç¼è¾æçä¿¡æ¯ ximon-admin/src/main/java/com/sandu/ximon/admin/param/AdminParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.sandu.ximon.admin.param; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; /** * @author chenjiantian * @date 2022/1/18 15:56 */ @Data public class AdminParam { @NotBlank(message = "è´¦å·ä¸è½ä¸ºç©º") private String username; @NotBlank(message = "å¯ç ä¸è½ä¸ºç©º") private String password; private String mobile; @NotBlank(message = "ç¨æ·åä¸è½ä¸ºç©º") private String nickName; private String note; @NotNull(message = "è§è²idä¸è½ä¸ºç©º") private Long roleId; } ximon-admin/src/main/java/com/sandu/ximon/admin/param/PwdParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.sandu.ximon.admin.param; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Size; /** * @author chenjiantian * @date 2022/1/18 16:21 */ @Data public class PwdParam { @NotBlank(message = "æ§å¯ç ä¸è½ä¸ºç©º") private String oldPass; @NotBlank(message = "æ°å¯ç ä¸è½ä¸ºç©º") @Size(min = 6,message = "å¯ç æçå¿ é¡»æ¯6ä½") private String newPass; @NotBlank(message = "确认å¯ç ä¸è½ä¸ºç©º") @Size(min = 6,message = "å¯ç æçå¿ é¡»æ¯6ä½") private String confirmPass; } ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
@@ -1,18 +1,112 @@ package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.sandu.common.enums.RoleLevelStatus; import com.sandu.common.execption.BusinessException; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.param.AdminParam; import com.sandu.ximon.admin.param.PwdParam; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.AdminRoleRelation; import com.sandu.ximon.dao.domain.Role; import com.sandu.ximon.dao.mapper.AdminMapper; import lombok.AllArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * @author chenjiantian * @date 2021/11/24 11:02 */ @Service @AllArgsConstructor public class AdminService extends BaseServiceImpl<AdminMapper, Admin> { private final PasswordEncoder passwordEncoder; private final AdminRoleRelationService adminRoleRelationService; private final RoleService roleService; public Admin findByUserName(String username) { return getOne(Wrappers.lambdaQuery(Admin.class).eq(Admin::getUsername, username).last("limit 1")); } @Transactional(rollbackFor = Exception.class) public boolean register(AdminParam param) { Admin admin = findByUserName(param.getUsername()); if (admin != null) { throw new BusinessException("å½åè´¦å·" + param.getUsername() + "å·²ç»åå¨"); } Admin save = new Admin(); save.setUsername(param.getUsername()); save.setPassword(passwordEncoder.encode(param.getPassword())); save.setNickName(param.getNickName()); save.setMobile(param.getMobile()); save.setNote(param.getNote()); if (!save(save)) { throw new BusinessException("注å管çå失败"); } Role role = roleService.getById(param.getRoleId()); if (role == null) { throw new BusinessException("è§è²ä¸åå¨"); } if (RoleLevelStatus.SUPER.getCode().equals(role.getLevel())) { throw new BusinessException("æ æ³æ·»å è¶ çº§ç®¡çå"); } AdminRoleRelation adminRoleRelation = new AdminRoleRelation(); adminRoleRelation.setAdminId(save.getId()); adminRoleRelation.setRoleId(param.getRoleId()); if (!adminRoleRelationService.save(adminRoleRelation)) { throw new BusinessException("æ·»å 管çåè§è²å¤±è´¥"); } return true; } public boolean updateAdmin(Long adminId, AdminParam param) { Admin admin = getById(adminId); if(admin == null){ throw new BusinessException("æ¾ä¸å°ç®¡çå"); } List<Role> roles = roleService.listByAdminId(admin.getId()); if(CollectionUtil.isEmpty(roles)){ throw new BusinessException("å½åç¨æ·æ²¡æè§è²"); } List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList()); int min = Collections.min(levels); roleService.assertLevels(min); Admin update = new Admin(); update.setId(adminId); update.setPassword(passwordEncoder.encode(param.getPassword())); update.setNickName(param.getNickName()); update.setMobile(param.getMobile()); update.setNote(param.getNote()); return updateById(update); } public boolean updateMyPassword(PwdParam param) { if(!StrUtil.equals(param.getNewPass(),param.getConfirmPass())){ throw new BusinessException("两次å¯ç ä¸ä¸è´"); } Long userId = SecurityUtils.getUserId(); Admin admin = getById(userId); if (admin == null) { throw new BusinessException("ç¨æ·ä¸åå¨"); } if(!passwordEncoder.matches(param.getOldPass(),admin.getPassword())){ throw new BusinessException("æ§å¯ç 䏿£ç¡®"); } Admin update = new Admin(); update.setId(userId); update.setPassword(passwordEncoder.encode(param.getNewPass())); return updateById(update); } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.enums.RoleLevelStatus; import com.sandu.common.execption.BusinessException; import com.sandu.common.execption.EntityExistException; import com.sandu.common.service.impl.BaseServiceImpl; @@ -83,7 +84,7 @@ Role role = new Role(); role.setName(param.getName()); role.setRemark(param.getRemark()); role.setLevel(2); role.setLevel(RoleLevelStatus.COMMON.getCode()); if(!save(role)){ throw new BusinessException("æ·»å è§è²å¤±è´¥"); } @@ -101,6 +102,7 @@ } assertLevels(role.getLevel()); Role update = new Role(); update.setId(roleId); update.setName(param.getName()); update.setRemark(param.getRemark()); if(!updateById(update)){ @@ -113,8 +115,12 @@ } private int assertLevels(Integer level) { /** * 夿å½åè§è²è½ä¸è½æä½ç®æ ç¨æ· ä¸è¡çè¯ç´æ¥æåºå¼å¸¸ * @param roleLevel ç®æ ç¨æ·çæå¤§è§è² * @return */ public int assertLevels(Integer roleLevel) { Long userId = SecurityUtils.getUserId(); List<Role> roles = listByAdminId(userId); if(CollectionUtil.isEmpty(roles)){ @@ -122,9 +128,9 @@ } List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList()); int min = Collections.min(levels); if (level != null) { if (level < min) { throw new BusinessException("æéä¸è¶³ï¼ä½ çè§è²çº§å«ï¼" + min + "ï¼ä½äºæä½çè§è²çº§å«ï¼" + level); if (roleLevel != null) { if (roleLevel < min) { throw new BusinessException("æéä¸è¶³ï¼ä½ çè§è²çº§å«ï¼" + min + "ï¼ä½äºæä½çè§è²çº§å«ï¼" + roleLevel); } } return min;