Browse Source

修改目录权限

zhouzeyu 1 week ago
parent
commit
ac4ee40851

+ 1 - 0
tr-framework/src/main/java/cn/tr/core/exception/TRExcCode.java

@@ -37,6 +37,7 @@ public enum TRExcCode implements BaseCode {
     USER_ERROR_A0151("A0151", "手机格式校验失败"),
     USER_ERROR_A0152("A0152", "地址格式校验失败"),
     USER_ERROR_A0153("A0153", "邮箱格式校验失败"),
+    USER_ERROR_A0154("A0154","密码修改失败"),
 
     /**** 登录 **/
     USER_ERROR_A0200("A0200", "用户登陆异常"),

+ 27 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/common/menus/VisibleEnum.java

@@ -0,0 +1,27 @@
+package cn.tr.module.common.menus;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 是否显示
+ *
+ * @author Kevin
+ */
+@Getter
+@AllArgsConstructor
+public enum VisibleEnum {
+
+    /**
+     * 显示
+     */
+    SHOW("0", "显示"),
+    /**
+     * 隐藏
+     */
+    HIDE("1", "隐藏");
+
+    private String code;
+    private String desc;
+
+}

+ 38 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/vo/UserPassVo.java

@@ -0,0 +1,38 @@
+/*
+ *  Copyright 2019-2020 Zheng Jie
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package cn.tr.module.sys.oauth2.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 修改密码的 Vo 类
+ * @author Zheng Jie
+ * @date 2019年7月11日13:59:49
+ */
+@Data
+@Tag(name = "密码修改")
+public class UserPassVo {
+    @Schema(description = "旧密码")
+    private String oldPass;
+    @Schema(description = "新密码")
+    @NotBlank(message = "新密码不能为空")
+    private String newPass;
+}

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java

@@ -278,7 +278,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuRepository, SysMenuPO
         // 查询菜单
         Set<Long> menuIds = sysRoleMenuList.stream().map(item -> item.getMenuId()).collect(Collectors.toSet());
         LambdaQueryWrapper<SysMenuPO> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(SysMenuPO::getStatus, StatusEnum.YES.getValue());
+        queryWrapper.eq(SysMenuPO::getStatus, String.valueOf(StatusEnum.YES.getValue()));
         queryWrapper.in(SysMenuPO::getMenuType, MenuTypeEnum.DIR.getCode(), MenuTypeEnum.MENU.getCode());
         queryWrapper.in(SysMenuPO::getId, menuIds);
         queryWrapper.eq(!TenantUtil.isTuoRen(),SysMenuPO::getTenantMenu,true);

+ 2 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPostServiceImpl.java

@@ -105,7 +105,7 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostRepository, SysPostPO
     @Override
     public List<SysPostPO> listOptions() {
         LambdaQueryWrapper<SysPostPO> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(SysPostPO::getStatus, StatusEnum.YES.getValue())
+        queryWrapper.eq(SysPostPO::getStatus, String.valueOf(StatusEnum.YES.getValue()))
                 .orderByAsc(SysPostPO::getSort);
         return this.list(queryWrapper);
     }
@@ -113,7 +113,7 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostRepository, SysPostPO
     @Override
     public List<SysPostPO> selectOptions() {
         LambdaQueryWrapper<SysPostPO> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(SysPostPO::getStatus, StatusEnum.YES.getValue())
+        queryWrapper.eq(SysPostPO::getStatus, String.valueOf(StatusEnum.YES.getValue()))
                 .orderByAsc(SysPostPO::getSort);
         return this.list(queryWrapper);
     }

+ 7 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java

@@ -32,6 +32,8 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import jakarta.annotation.Resource;
+
+import javax.swing.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -153,7 +155,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleRepository, SysRolePO
 
     @Override
     public List<SysRolePO> listOptions() {
-        return this.list(Wrappers.lambdaQuery(SysRolePO.class).eq(SysRolePO::getStatus, StatusEnum.YES.getValue()).orderByAsc(SysRolePO::getSort));
+        String stuate = String.valueOf(StatusEnum.YES.getValue());
+        return this.list(Wrappers.lambdaQuery(SysRolePO.class)
+                .eq(SysRolePO::getStatus, stuate)
+                .orderByAsc(SysRolePO::getSort));
     }
 
     @Override
@@ -209,7 +214,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleRepository, SysRolePO
             queryWrapper.lambda().eq(SysMenuPO::getTenantMenu,true);
         }
         if (role.getRoleCode().contains("admin")) {
-            queryWrapper.lambda().eq(SysMenuPO::getStatus, StatusEnum.YES.getValue());
+            queryWrapper.lambda().eq(SysMenuPO::getStatus, String.valueOf(StatusEnum.YES.getValue()));
             queryWrapper.lambda().in(SysMenuPO::getMenuType, MenuTypeEnum.DIR.getCode(), MenuTypeEnum.MENU.getCode());
             return sysMenuService.list(queryWrapper);
         }else {

+ 2 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java

@@ -79,7 +79,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository, SysUserPO
         queryWrapper.like(StrUtil.isNotBlank(req.getEmail()), SysUserPO::getEmail, req.getEmail());
         queryWrapper.like(StrUtil.isNotBlank(req.getPhone()), SysUserPO::getPhone, req.getPhone());
         queryWrapper.like(StrUtil.isNotBlank(req.getStaffNumber()), SysUserPO::getStaffNumber, req.getStaffNumber());
-        queryWrapper.eq(SysUserPO::getStatus, StatusEnum.YES.getValue());
+        queryWrapper.eq(SysUserPO::getStatus, String.valueOf(StatusEnum.YES.getValue()));
         queryWrapper.and(StrUtil.isNotBlank(req.getDeptId()), wrapper -> wrapper.eq(SysUserPO::getDeptId, req.getDeptId())
                 .or(!CollectionUtils.isEmpty(sysDeptIdList), wrapper2 -> wrapper2.in(SysUserPO::getDeptId, sysDeptIdList)));
         queryWrapper.orderByAsc(SysUserPO::getCreateTime);
@@ -105,7 +105,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository, SysUserPO
         queryWrapper.like(StrUtil.isNotBlank(req.getPhone()), SysUserPO::getPhone, req.getPhone());
         queryWrapper.like(StrUtil.isNotBlank(req.getStaffNumber()), SysUserPO::getStaffNumber, req.getStaffNumber());
         queryWrapper.like(StrUtil.isNotBlank(req.getDeptId()), SysUserPO::getDeptId, req.getDeptId());
-        queryWrapper.eq(SysUserPO::getStatus, StatusEnum.YES.getValue());
+        queryWrapper.eq(SysUserPO::getStatus, String.valueOf(StatusEnum.YES.getValue()));
         queryWrapper.orderByAsc(SysUserPO::getCreateTime);
         List<SysUserPO> list = this.list(queryWrapper);
         if(sysDeptService != null) {

+ 203 - 0
tr-modules/tr-modules-phototherapy/src/main/java/cn/tr/module/phototherapy/web/auth/WebAccountOperator.java

@@ -0,0 +1,203 @@
+package cn.tr.module.phototherapy.web.auth;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.tr.core.utils.PswUtils;
+import cn.tr.module.common.menus.*;
+import cn.tr.module.sys.exception.CustomException;
+import cn.tr.module.sys.oauth2.bean.LoginUser;
+import cn.tr.module.sys.oauth2.enums.GrantTypeEnum;
+import cn.tr.module.sys.oauth2.granter.IAccountOperator;
+import cn.tr.module.sys.oauth2.utils.SecurityUtil;
+import cn.tr.module.sys.oauth2.vo.AccountInfoVO;
+import cn.tr.module.sys.oauth2.vo.RoleInfoVO;
+import cn.tr.module.sys.oauth2.vo.UserInfoVO;
+import cn.tr.module.sys.user.constant.MenuConstants;
+import cn.tr.module.sys.user.po.SysMenuPO;
+import cn.tr.module.sys.user.po.SysRolePO;
+import cn.tr.module.sys.user.po.SysUserPO;
+import cn.tr.module.sys.user.service.ISysMenuService;
+import cn.tr.module.sys.user.service.ISysRoleService;
+import cn.tr.module.sys.user.service.impl.ISysUserService;
+import cn.tr.module.sys.user.vo.RouteItemVO;
+import cn.tr.module.sys.user.vo.RouteMetoVO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName DefaultAccountOperator.java
+ * @Description 默认账户操作
+ * @createTime 2022年08月01日 15:40:00
+ */
+@Component
+@AllArgsConstructor
+public class WebAccountOperator implements IAccountOperator {
+    private final ISysMenuService sysMenuService;
+
+    private final ISysUserService sysUserService;
+
+    private final ISysRoleService sysRoleService;
+
+
+    @Override
+    public boolean matchGrantType(GrantTypeEnum type) {
+        return GrantTypeEnum.APPKEY_APPSECRET.equals(type)
+                ||GrantTypeEnum.WEB_USERNAME_PASSWORD.equals(type);
+    }
+
+    @Override
+    public UserInfoVO getUserInfo() {
+        UserInfoVO userInfoVO = new UserInfoVO();
+        LoginUser loginUser = SecurityUtil.getLoginUser();
+        if(GrantTypeEnum.WEB_USERNAME_PASSWORD.equals(loginUser.getGrantType())){
+            SysUserPO sysUser = sysUserService.getById(SecurityUtil.getStpLogic().getLoginIdAsLong());
+            // 查询角色列表
+            List<SysRolePO> sysRoleList = sysRoleService.listSysRoleByUserId(sysUser.getId());
+            List<RoleInfoVO> roleInfoVOList = sysRoleList.stream().map(item -> {
+                RoleInfoVO roleInfoVO = new RoleInfoVO();
+                roleInfoVO.setRoleName(item.getRoleName());
+                roleInfoVO.setValue(item.getRoleCode());
+                return roleInfoVO;
+            }).collect(Collectors.toList());
+            userInfoVO.setUserId(sysUser.getId().toString());
+            userInfoVO.setUsername(sysUser.getAccount());
+            String realname=StrUtil.isNotEmpty(sysUser.getRealname())?sysUser.getRealname():sysUser.getNickname();
+            userInfoVO.setRealName(realname);
+            userInfoVO.setNickname(sysUser.getNickname());
+            userInfoVO.setAvatar(sysUser.getAvatar());
+            userInfoVO.setDesc(sysUser.getRemarks());
+            userInfoVO.setRoles(roleInfoVOList);
+            userInfoVO.setIsSys(sysUser.getIsSys());
+            userInfoVO.setTenantName(sysUser.getTenantName());
+            userInfoVO.setPswNeedReset(sysUser.getPswNeedReset());
+        }
+        userInfoVO.setTenantId(String.valueOf(loginUser.getTenantId()));
+        return userInfoVO;
+    }
+
+    @Override
+    public Set<String> getPermCode() {
+        return SecurityUtil.getLoginUser().getPermissions();
+    }
+
+    @Override
+    public List<RouteItemVO> getMenuList() {
+        List<SysMenuPO> sysMenuList;
+        LoginUser<Long> loginUser = SecurityUtil.getLoginUser();
+        if (SecurityUtil.isSuperAdmin()) {
+            LambdaQueryWrapper<SysMenuPO> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(SysMenuPO::getStatus,String.valueOf(StatusEnum.YES.getValue()));
+            queryWrapper.in(SysMenuPO::getMenuType, MenuTypeEnum.DIR.getCode(), MenuTypeEnum.MENU.getCode());
+            queryWrapper.eq(!loginUser.isSys(),SysMenuPO::getTenantMenu,true);
+            sysMenuList = sysMenuService.list(queryWrapper);
+        } else {
+            sysMenuList = sysMenuService.listGrantMenuByUserId(loginUser.getId());
+        }
+        List<RouteItemVO> routeItemVOList = sysMenuList.stream()
+                .filter(item -> item.getParentId().intValue() == 0)
+                .sorted(Comparator.comparing(SysMenuPO::getSort))
+                .map(item -> {
+                    RouteItemVO node = convertToRoute(item);
+                    node.setChildren(getChildrenList(item, sysMenuList));
+                    return node;
+                }).collect(Collectors.toList());
+        return routeItemVOList;
+    }
+
+    @Override
+    public AccountInfoVO getAccountInfo() {
+        LoginUser<Long> loginUser = SecurityUtil.getLoginUser();
+        SysUserPO sysUser = sysUserService.getById(loginUser.getId());
+        AccountInfoVO accountInfoVO = BeanUtil.copyProperties(sysUser, AccountInfoVO.class);
+        accountInfoVO.setRealName(sysUser.getRealname());
+        return accountInfoVO;
+    }
+
+    @Override
+    public void saveAccountInfo(AccountInfoVO req) {
+        LoginUser<Long> loginUser = SecurityUtil.getLoginUser();
+        SysUserPO entity = BeanUtil.copyProperties(req, SysUserPO.class);
+        entity.setId(loginUser.getId());
+        entity.setNickname(req.getNickname());
+        entity.setRealname(req.getRealName());
+        sysUserService.updateById(entity);
+    }
+
+    @Override
+    public boolean updatePass(String oldPass, String newPass) {
+        // 密码解密
+        Long userId = Long.valueOf(String.valueOf(SecurityUtil.getId()));
+        SysUserPO sysUser = sysUserService.getById(userId);
+        if (!SecurityUtil.matchesPassword(oldPass, sysUser.getPassword())) {
+            throw new CustomException("旧密码不正确");
+        }
+        if (!PswUtils.validatePsw(newPass)) {
+            throw new CustomException("密码由8~16位大小写字母、数字及特殊字符等混合、随机组成(至少包括数字、小写字母、大写字母和特殊符号中的三种)");
+        }
+        boolean validatePsw = PswUtils.validatePsw(newPass);
+        String encryptPassword = SecurityUtil.encryptPassword(newPass);
+        return sysUserService
+                .update(new UpdateWrapper<SysUserPO>()
+                        .lambda().eq(SysUserPO::getId,userId)
+                        .set(SysUserPO::getPassword,encryptPassword)
+                        .set(SysUserPO::getLastModifyPswTime,new Date())
+                        .set(SysUserPO::getPswNeedReset,!validatePsw));
+    }
+
+    private List<RouteItemVO> getChildrenList(SysMenuPO root, List<SysMenuPO> list) {
+        List<RouteItemVO> childrenList = list.stream()
+                .filter(item -> item.getParentId().equals(root.getId()))
+                .sorted(Comparator.comparing(SysMenuPO::getSort))
+                .map(item -> {
+                    RouteItemVO node = convertToRoute(item);
+                    node.setChildren(getChildrenList(item, list));
+                    return node;
+                }).collect(Collectors.toList());
+        return childrenList;
+    }
+
+    private RouteItemVO convertToRoute(SysMenuPO item) {
+        RouteItemVO node = new RouteItemVO();
+        node.setName(StrUtil.upperFirst(item.getRoutePath()));
+        node.setPath(item.getRoutePath());
+        node.setComponent(item.getComponent());
+        // 一级目录
+        if (Objects.equals(item.getMenuType(), MenuTypeEnum.DIR.getCode()) && item.getParentId().intValue() == 0) {
+            node.setPath("/" + item.getRoutePath());
+            node.setComponent(MenuConstants.LAYOUT);
+        }
+        // 外部链接
+        if (Objects.equals(item.getMenuType(), MenuTypeEnum.MENU.getCode()) && Objects.equals(item.getLinkExternal(), LinkExternalEnum.YES.getCode())) {
+            node.setComponent(MenuConstants.IFRAME);
+        }
+        RouteMetoVO routeMetoVO = new RouteMetoVO();
+        routeMetoVO.setTitle(item.getMenuName());
+        routeMetoVO.setIcon(item.getIcon());
+        routeMetoVO.setHideMenu(StrUtil.isNotBlank(item.getVisible()) && item.getVisible().equals(VisibleEnum.HIDE.getCode()));
+        // 菜单
+        if (Objects.equals(item.getMenuType(), MenuTypeEnum.MENU.getCode())) {
+            routeMetoVO.setIgnoreKeepAlive(item.getKeepalive().equals(KeepaliveEnum.YES.getCode()));
+        }
+        // 外部链接
+        if (Objects.equals(item.getMenuType(), MenuTypeEnum.MENU.getCode()) && Objects.equals(item.getLinkExternal(), LinkExternalEnum.YES.getCode())) {
+            // 内嵌
+            if (Objects.equals(item.getFrame(), FrameEnum.YES.getCode())) {
+                routeMetoVO.setFrameSrc(item.getLinkUrl());
+            }
+            // 外嵌
+            if (item.getFrame().equals(FrameEnum.NO.getCode())) {
+                node.setPath(item.getLinkUrl());
+            }
+        }
+        node.setMeta(routeMetoVO);
+        return node;
+    }
+}