zhuo
2025-02-20 2a7781d6908f2b8dcd197ba215301761603fe17d
添加仅看我权限注解
已修改11个文件
已添加3个文件
245 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/controller/StandardTemplateController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/PersonalScope.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/PersonalScopeAspect.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysRoleVo.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/StandardTemplateController.java
@@ -57,7 +57,7 @@
    @GetMapping("/getEditTemplatePreparation")
    public Result<?> getEditTemplatePreparation(@RequestParam("id") Integer id) {
        StandardTemplate byId = standardTemplateService.getById(id);
        return Result.success("OK", byId.getThing());
        return Result.success(byId.getThing());
    }
    @ApiOperation(value = "复制原始记录模板")
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -85,7 +85,7 @@
    @GetMapping("/selectOrderManDay")
    public Result<?> selectOrderManDay(Integer id) {
        int day = insProductService.selectOrderManDay(id);
        return Result.success("成功", LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        return Result.success(LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
    }
    @ApiOperation(value = "查询检验下单内容详情")
@@ -120,7 +120,7 @@
    @ApiOperation(value = "通过检验单模板id获取检验单模板内容")
    @GetMapping("/selectInsOrderTemplateById")
    public Result<?> selectInsOrderTemplateById(Integer id) {
        return Result.success("成功", insOrderTemplateService.selectInsOrderTemplateById(id));
        return Result.success(insOrderTemplateService.selectInsOrderTemplateById(id));
    }
    @ApiOperation(value = "删除检验单模板")
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.oa.OAProcess;
import com.ruoyi.inspect.dto.PushOADto;
@@ -59,6 +60,7 @@
    }
    @Anonymous
    @ApiOperation(value = "不合格处理OA回调")
    @RequestMapping(value = "/callback", produces = "text/plain")
    public String unqualifiedHandlerOACallback(String data){
@@ -72,7 +74,7 @@
            JSONArray objects = JSONArray.parseArray(JSONObject.toJSONString(o));
            unqualifiedHandlerService.unqualifiedHandlerOACallback(oaWorkId, checkResult,objects);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            log.error("oa回调失败: " + e.getMessage());
            msg = OAProcess.oaReturnMsg(1, "oa回调失败: " + e.getMessage());
        }
        System.out.println("oa回调返回结果========>" + msg);
inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.*;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.common.annotation.PersonalScope;
import com.ruoyi.inspect.dto.InsPlaceOrderDto;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.pojo.InsOrder;
@@ -19,6 +20,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -54,6 +56,8 @@
    @ApiOperation(value = "原材料检验查询检验中")
    @GetMapping("/getIfsByStateOne")
//    @PreAuthorize("@ss.hasPermi('business:order')")
//    @PersonalScope(permsName = "business:order", objectName = IfsInventoryQuantityDto.class, paramName = "createUser")
    public Result getIfsByStateOne(Page page, IfsInventoryQuantityDto ifsInventoryQuantityDto){
        return Result.success(rawMaterialOrderService.getIfsByStateOne(page, ifsInventoryQuantityDto));
    }
@@ -78,7 +82,7 @@
    @ApiOperation(value = "通过原材料检验单模板id获取检验单模板内容")
    @GetMapping("/selectRawMaterOrderTemplateById")
    public Result<?> selectRawMaterOrderTemplateById(Integer id) {
        return Result.success("成功", rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
        return Result.success(rawMaterialOrderTemplateService.selectRawMaterOrderTemplateById(id));
    }
    @ApiOperation(value = "删除原材料检验单模板")
@@ -144,7 +148,7 @@
    @ApiOperation(value = "获取铜产业链检测数据")
    @GetMapping("/getIndustryChain")
    public Result<?> getIndustryChain(Integer id) {
        return Result.success("成功", rawMaterialOrderService.getIndustryChain(id));
        return Result.success(rawMaterialOrderService.getIndustryChain(id));
    }
    /**
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -743,9 +743,6 @@
            }
            return null;
        });
        // todo: åˆ é™¤æ•°é‡‡é‡‡é›†æ¬¡æ•°
//        String key = "frequency" + ":" + entrustCode + ":*";
//        RedisUtil.delsLike(key);
        // æäº¤ç”ŸæˆæŠ¥å‘Š
        this.generateReport(orderId);
@@ -789,8 +786,7 @@
            }
        }
        // todo: æˆå“æŠ½æ ·æ·»åŠ åˆæ ¼çŠ¶æ€
        // æˆå“æŠ½æ ·æ·»åŠ åˆæ ¼çŠ¶æ€
        // åˆ¤æ–­æ˜¯å¦æœ‰æŠ½æ ·ä¿¡æ¯
        if (order.getQuarterItemId() != null) {
            // åˆ¤æ–­æ˜¯å¦æœ‰ä¸åˆæ ¼
ruoyi-common/src/main/java/com/ruoyi/common/annotation/PersonalScope.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
 * ä»…看我权限
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PersonalScope {
    /**
     * æƒé™æ ‡è¯†åç§°
     * @return
     */
    String permsName();
    /**
     * å¯¹è±¡åç§°
     * @return
     */
    Class objectName();
    /**
     * å‚数名称
     * @return
     */
    String paramName();
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
@@ -11,7 +11,7 @@
/**
 * Treeselect树结构实体类
 *
 *
 * @author ruoyi
 */
public class TreeSelect implements Serializable
@@ -23,6 +23,9 @@
    /** èŠ‚ç‚¹åç§° */
    private String label;
    /** æ˜¯å¦å¯ä»¥é€‰æ‹©ä»…看我, 0:否, 1:是 */
    private Integer isRersonalButton;
    /** èŠ‚ç‚¹ç¦ç”¨ */
    private boolean disabled = false;
@@ -48,6 +51,7 @@
    {
        this.id = menu.getMenuId();
        this.label = menu.getMenuName();
        this.isRersonalButton = menu.geIsRersonalButton();
        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
    }
@@ -90,4 +94,14 @@
    {
        this.children = children;
    }
    public Integer geIsRersonalButton()
    {
        return isRersonalButton;
    }
    public void setIsRersonalButton(Integer isRersonalButton)
    {
        this.isRersonalButton = isRersonalButton;
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -11,7 +11,7 @@
/**
 * èœå•权限表 sys_menu
 *
 *
 * @author ruoyi
 */
public class SysMenu extends BaseEntity
@@ -65,6 +65,9 @@
    /** èœå•图标 */
    private String icon;
    /** æ˜¯å¦å¯ä»¥é€‰æ‹©ä»…看我, 0:否, 1:是 */
    private Integer isRersonalButton;
    /** å­èœå• */
    private List<SysMenu> children = new ArrayList<SysMenu>();
@@ -236,6 +239,16 @@
        this.icon = icon;
    }
    public Integer geIsRersonalButton()
    {
        return isRersonalButton;
    }
    public void setIsRersonalButton(Integer isRersonalButton)
    {
        this.isRersonalButton = isRersonalButton;
    }
    public List<SysMenu> getChildren()
    {
        return children;
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/PersonalScopeAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.framework.aspectj;
import com.ruoyi.common.annotation.PersonalScope;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.vo.SysRoleVo;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.List;
/**
 * ä»…看我权限
 *
 * @Author zhuo
 * @Date 2025/2/20
 */
@Aspect
@Component
public class PersonalScopeAspect {
    @Autowired
    private SysRoleMenuMapper sysRoleMenuMapper;
    @Pointcut("@annotation(com.ruoyi.common.annotation.PersonalScope)")
    public void dataScopePointCut() {
    }
    @Before("dataScopePointCut()")
    public void doBefore(JoinPoint point) throws Throwable {
        Long userId = SecurityUtils.getUserId();
        // èŽ·å–ç›®æ ‡æ–¹æ³•çš„ç­¾å
        MethodSignature signature = (MethodSignature) point.getSignature();
        // èŽ·å–ç›®æ ‡æ–¹æ³•ä¸Šçš„æ³¨è§£
        PersonalScope annotation = signature.getMethod().getAnnotation(PersonalScope.class);
        // èŽ·å–æƒé™åˆ¤æ–­æ˜¯å¦æ˜¯ä»…çœ‹æˆ‘
        SysRoleVo sysRoleVo = sysRoleMenuMapper.selectRoleMenu(annotation.permsName(), userId);
        //没有仅看我权限跳过
        if (sysRoleVo == null || sysRoleVo.getIsRersonal() == null || !sysRoleVo.getIsRersonal().equals(1)) {
            return;
        }
        // èŽ·å–æ–¹é¢ä¸Šæ‰€æœ‰çš„å¯¹è±¡
        Object[] args = point.getArgs();
        for (Object arg : args) {
            // å¾ªçŽ¯æŸ¥æ‰¾åŒ¹é…çš„å¯¹è±¡
            if (arg.getClass().equals(annotation.objectName())) {
                Class<?> argClass = arg.getClass();
                // æŸ¥æ‰¾éœ€è¦å¡«å……的字段
                Field declaredField = getField(argClass, annotation.paramName());
                declaredField.setAccessible(true);
                // æ·»åŠ ç”¨æˆ·Id
                declaredField.set(arg, userId.intValue());
            }
        }
    }
    // é€’归查找字段
    private Field getField(Class<?> clazz, String fieldName) throws NoSuchFieldException {
        // ä»Žå½“前类开始查找字段
        try {
            return clazz.getDeclaredField(fieldName);
        } catch (NoSuchFieldException e) {
            // å¦‚果当前类没有找到,检查父类
            Class<?> superClass = clazz.getSuperclass();
            if (superClass != null) {
                return getField(superClass, fieldName);
            } else {
                throw e;
            }
        }
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@
            .authorizeHttpRequests((requests) -> {
                permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                requests.antMatchers("/login", "/register", "/captchaImage", "/unqualifiedHandler/callback").permitAll()
                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
                    // é™æ€èµ„源,可匿名访问
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                    .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysRoleVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2025/2/20
 */
@Data
public class SysRoleVo {
    @ApiModelProperty("权限标识")
    private String perms;
    @ApiModelProperty("菜单名称")
    private String menuName;
    @ApiModelProperty("是否仅看我, 0: å¦, 1:是")
    private Integer isRersonal;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
@@ -2,17 +2,19 @@
import java.util.List;
import com.ruoyi.system.domain.SysRoleMenu;
import com.ruoyi.system.domain.vo.SysRoleVo;
import org.apache.ibatis.annotations.Param;
/**
 * è§’色与菜单关联表 æ•°æ®å±‚
 *
 *
 * @author ruoyi
 */
public interface SysRoleMenuMapper
{
    /**
     * æŸ¥è¯¢èœå•使用数量
     *
     *
     * @param menuId èœå•ID
     * @return ç»“æžœ
     */
@@ -20,7 +22,7 @@
    /**
     * é€šè¿‡è§’色ID删除角色和菜单关联
     *
     *
     * @param roleId è§’色ID
     * @return ç»“æžœ
     */
@@ -28,7 +30,7 @@
    /**
     * æ‰¹é‡åˆ é™¤è§’色菜单关联信息
     *
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ID
     * @return ç»“æžœ
     */
@@ -36,9 +38,17 @@
    /**
     * æ‰¹é‡æ–°å¢žè§’色菜单信息
     *
     *
     * @param roleMenuList è§’色菜单列表
     * @return ç»“æžœ
     */
    public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
    /**
     * æ ¹æ®æƒé™æ ‡è¯†å’Œç”¨æˆ·id查询权限
     * @param permsName
     * @param userId
     * @return
     */
    SysRoleVo selectRoleMenu(@Param("permsName") String permsName, @Param("userId") Long userId);
}
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -26,10 +26,11 @@
        <result property="updateTime"     column="update_time"    />
        <result property="updateBy"       column="update_by"      />
        <result property="remark"         column="remark"         />
        <result property="isRersonalButton"         column="is_rersonal_button"         />
    </resultMap>
    <sql id="selectMenuVo">
        select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
        select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time, is_rersonal_button
        from sys_menu
    </sql>
@@ -56,7 +57,7 @@
    </select>
    <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
        select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.route_name, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.route_name, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time, m.is_rersonal_button
        from sys_menu m
        left join sys_role_menu rm on m.menu_id = rm.menu_id
        left join sys_user_role ur on rm.role_id = ur.role_id
@@ -152,6 +153,7 @@
            <if test="icon !=null and icon != ''">icon = #{icon},</if>
            <if test="remark != null and remark != ''">remark = #{remark},</if>
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="isRersonalButton != null and isRersonalButton != ''">is_rersonal_button = #{isRersonalButton},</if>
            update_time = sysdate()
        </set>
        where menu_id = #{menuId}
ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
@@ -8,27 +8,40 @@
        <result property="roleId"     column="role_id"      />
        <result property="menuId"     column="menu_id"      />
    </resultMap>
    <select id="checkMenuExistRole" resultType="Integer">
        select count(1) from sys_role_menu where menu_id = #{menuId}
    </select>
    <delete id="deleteRoleMenuByRoleId" parameterType="Long">
    <!-- æ ¹æ®æƒé™æ ‡è¯†å’Œç”¨æˆ·id查询权限 -->
    <select id="selectRoleMenu" resultType="com.ruoyi.system.domain.vo.SysRoleVo">
        select sm.perms,
               sm.menu_name,
               srm.is_rersonal
        from sys_role_menu srm
                 left join sys_menu sm on sm.menu_id = srm.menu_id
                 left join sys_user_role sur on srm.role_id = sur.role_id
        where sm.perms = #{permsName}
          and sur.user_id = #{userId}
        group by sm.menu_id
    </select>
    <delete id="deleteRoleMenuByRoleId" parameterType="Long">
        delete from sys_role_menu where role_id=#{roleId}
    </delete>
    <delete id="deleteRoleMenu" parameterType="Long">
         delete from sys_role_menu where role_id in
         <foreach collection="array" item="roleId" open="(" separator="," close=")">
             #{roleId}
        </foreach>
        </foreach>
     </delete>
    <insert id="batchRoleMenu">
        insert into sys_role_menu(role_id, menu_id) values
        <foreach item="item" index="index" collection="list" separator=",">
            (#{item.roleId},#{item.menuId})
        </foreach>
    </insert>
</mapper>
</mapper>