ruoyi 添加数据权限,解决 cannot be cast to问题

文章介绍了在若依框架中添加数据权限的详细步骤,包括在业务表中增加用户ID和部门ID字段,修改Bean和Mapper.xml以包含新字段,更新接口实现类以应用数据权限注解,并展示了如何配置角色和用户进行权限测试。在测试过程中遇到的类型转换错误是因为BaseEntity类的不一致,修正后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若依添加数据权限

因为业务要求,需要给不同部门的人给不同的数据查看权限,所以需要进行权限控制,本功能思路是,在业务表中增加用户id以及部门ID,然后再查询的时候进行过滤,就达到了 个人 以及部门的权限控制。

代码修改

第一步-【新增权限控制字段】

在业务表中创建user_id以及dept_id字段。

	alter table 业务表
    add user_id bigint not null comment '用户ID';

alter table 业务表
    add dept_id bigint not null comment '部门ID';

第二步-【修改Bean以及Mapper.xml】

完善业务Bean以及Mapper.xml

  • 在业务对象中新增userId以及deptId,如下图
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * 部门Id
     */
    private Long deptId;

在这里插入图片描述

  • 在resultMap中新增映射
        <result property="userId"    column="user_id"    />
        <result property="deptId"    column="dept_id"    />
  • 新增字段查询,并为此表增加别名
	 select id, customer_name,customer_num,user_id,dept_id from t_customer_info tci
  • 在SQL后增加DataScope串
	${params.dataScope}
  • 在insert语句中增加userId以及deptId插入
 <insert id="insertTCustomerInfo" parameterType="TCustomerInfo">
        insert into t_customer_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
       
            <if test="userId != null">user_id,</if>
            <if test="deptId != null">dept_id,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
           
            <if test="userId != null">#{userId},</if>
            <if test="deptId != null">#{deptId},</if>
         </trim>
    </insert>
  • 最终XML修改如下图
    在这里插入图片描述在这里插入图片描述

第三步-[修改接口实现类]

  • 修改Controller接口-新增@DataScope注解
	@DataScope(deptAlias = "tci",userAlias = "tci")

如图下
在这里插入图片描述

  • 入库时在ServiceImpl中新增权限字段信息入库
        tCustomerInfo.setUserId(ShiroUtils.getUserId());
        tCustomerInfo.setDeptId(ShiroUtils.getSysUser().getDeptId());

如下图
在这里插入图片描述

创建角色配置登录用户信息

  • 创建角色
    在这里插入图片描述- 分配数据权限
    在这里插入图片描述
    在这里插入图片描述
  • 创建用户选择客户权限
    在这里插入图片描述

开始测试

  • 使用coustom001账号登录
    在这里插入图片描述

遇到的问题

  1. 在进行测试的时候出现了如下错误
  2. 在这里插入图片描述发现类型转换出现了错误,后查看若依DataScope注解发现 在使用的时候项目中存在多个BaseEntity类,其中本业务集成的BaseEntity类跟DataScope中强转的类不同,改变一下业务类集成即可解决问题
  3. 源码地址如下:
    在这里插入图片描述
### RuoYi框架多数据源配置下的SQL方言解决方案 在RuoYi框架中,当涉及多数据源配置时,解决不同数据库之间的SQL方言问题是至关重要的。通过启用`autoRuntimeDialect`选项并合理配置MyBatis-Plus的相关属性,可以动态适配不同的数据库方言。 #### 动态方言支持 为了使RuoYi框架能够适应多种数据库环境,在配置文件中需开启自动运行时方言检测功能。具体来说,可以通过设置`auto-runtime-dialect: true`来让系统根据当前使用的数据源自动选择适合的SQL方言[^3]。这种方式避免了手动指定特定方言可能带来的局限性和错误风险。 #### 自定义方言实现 对于某些特殊类型的数据库(如Caché),由于其独特的语法结构并未被主流ORM工具完全覆盖,因此需要开发者自行扩展相应的方言类。例如,在处理Caché数据库分页查询时,可通过继承`IDialect`接口创建名为`CacheDialect`的新类,并重写其中的方法以满足需求: ```java public class CacheDialect implements IDialect { @Override public DialectModel buildPaginationSql(String originalSql, long offset, long limit) { long firstParam = offset + 1; long secondParam = offset + limit; String sql = "SELECT %VID,* FROM (" + originalSql + ") WHERE %VID BETWEEN ? AND ?"; return new DialectModel(sql, firstParam, secondParam); } } ``` 此代码片段展示了如何针对Caché数据库构建带有行号过滤条件的分页查询语句[^1]。 #### YML配置示例 以下是适用于Spring Boot项目的application.yml部分配置项展示,用于说明如何激活上述提到的功能特性: ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: true global-config: db-config: id-type: AUTO auto-mapper-location: classpath*:mapper/*.xml pagehelper: # helper-dialect: mysql # 如果不需要自定义则无需保留此项 auto-runtime-dialect: true # 开启自动探测机制 support-methods-arguments: true params: count=countSql ``` 以上配置确保了即使切换至其他类型的数据源也能正常工作而无需额外调整业务逻辑层代码[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值