关于jeecgboot中遇到的问题及解决方案

1关于数据权限问题

        目的:一个人对应多个部门,部门下可能有子部门,过滤数据权限

        解决方案:

                方案①不推荐):如果后台是手写的sql(没有用到mybatis-plus),则只能通过后台  代码进行过滤,自己封装了一个方法,可以借鉴一下:

/**
 *获取当前登录人及下属所属的所有部门
 * @return
 */
public Set<String> getDeptCodeAll(){
    //用来存取当前登录人及下属所属的部门
    Set<String> deptCodeAll = new HashSet<>();
    //获取当前登录人
    LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
    //获取当前登录人所属的所有部门
    List<SysDepartModel> departModelList = sysBaseAPI.getDepartsByUserId(loginUser.getId());
    //获取部门下的所有子部门
    for (SysDepartModel v:departModelList){
            List<String> departNextDeptCodes = jxDeptIndexWeightSetMapper.getDeptAll(v.getOrgCode());
            if (oConvertUtils.listIsNotEmpty(departNextDeptCodes)){
                deptCodeAll.addAll(departNextDeptCodes);
            }
    }
    return deptCodeAll;
}
@Select("select org_code from sys_depart where  org_code like concat(#{orgCode},'%')")
List<String> getDeptAll(@Param("orgCode") String orgCode);

                方案②(系统推荐):

        找到菜单管理要配置数据权限的菜单,并进行数据权限配置:

         之后在角色管理进行角色菜单授权:

 2,关于首页中待办事宜,消息提醒数据跳转的问题

        第一步①:

  • 数字底座

    • 通知中心

      • 消息注册管理:

        第二步②:

  • 数字底座

    • 微应用中心

      • 微应用管理:

         

<think>好的,用户问的是关于JeecgBoot的数据权限配置,特别是部门多级情况下只能看到自己部门数据的问题。我需要先回忆JeecgBoot的数据权限机制。记得JeecgBoot是基于MyBatis-Plus和Spring Boot的,数据权限通常通过注解或SQL拦截器实现。 用户提到部门有多个层级,可能需要考虑部门树结构,比如使用父部门ID来构建层级。数据权限配置可能涉及用户角色和部门ID的关联。常见的做法是在查询时自动添加WHERE条件,限制只能访问自己部门及其子部门的数据。 需要确认JeecgBoot中的具体实现方式,比如@PermissionData注解的使用,或者后台如何配置角色权限规则。可能需要指导用户如何在角色管理中设置数据规则,选择“本部门及以下”这样的选项,并且确保部门实体中有对应的字段,比如sys_org_code的层级结构。 另外,用户可能遇到的问题是即使配置了部门权限,但查询结果不符合预期。这时候可能需要检查部门编码的结构是否正确,比如是否是树形结构,用逗号分隔,或者是否有正确的父部门ID。同时,需要确保用户所在的部门正确,以及权限配置是否应用到了对应的菜单或按钮上。 可能还需要提到自定义SQL片段的情况,如果用户有复杂的查询,可能需要手动添加数据权限的条件,使用${ew.customSqlSegment}来集成MyBatis-Plus的Wrapper条件。 最后,总结步骤:配置角色数据权限规则,选择部门范围,检查部门结构,确认用户部门,应用权限到菜单,以及处理自定义SQL的情况。如果有问题,建议用户检查日志中的SQL语句,确认条件是否正确添加。</think>JeecgBoot 的数据权限配置支持基于部门层级的精细化控制,尤其适用于多级部门结构的场景。以下是实现 **“用户只能看到本部门及下属部门数据”** 的配置方法: --- ### **1. 核心配置步骤** #### **1.1 部门结构要求** - 确保部门表(如 `sys_depart`)中存在层级编码字段(如 `sys_org_code`),格式类似 `父部门编码,当前部门编码`(例如:`A01,A01B02`)。 - 层级编码需维护父子关系,JeecgBoot 默认通过 `sys_org_code` 实现树形结构。 #### **1.2 角色数据权限配置** 1. **进入角色管理** 路径:`系统管理 -> 角色管理 -> 编辑角色 -> 数据权限`。 2. **设置数据规则** - **规则类型**:选择 `本部门及以下部门数据` 或 `自定义部门`。 - **部门范围**:若选择“自定义部门”,可手动勾选允许访问的部门树节点。 - **绑定菜单**:将该数据权限规则关联到具体菜单(如某个查询页面)。 #### **1.3 实体类注解配置** 在需要数据隔离的实体类字段上添加 `@Dict` 和权限注解,标识部门字段: ```java // 示例:实体类中标识部门编码字段 @TableName("your_table") public class YourEntity { @Excel(name = "所属部门", width = 15, dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") private String sysOrgCode; // 关联部门编码字段 } ``` #### **1.4 前端页面配置** 在 Vue 列表页面的 `created` 钩子中,添加权限标签 `{ key: 'sysOrgCode', rule: 'sysOrgCode' }`,与后端规则匹配: ```javascript // 示例:Vue 页面声明数据权限字段 created() { this.dataPermissions.push({ key: 'sysOrgCode', rule: 'sysOrgCode' }); } ``` --- ### **2. 实现原理** JeecgBoot 通过 **MyBatis 拦截器**动态修改 SQL: - 自动追加 `WHERE` 条件,限制 `sys_org_code` 的访问范围。 - 根据用户所属部门的 `sys_org_code`,匹配其自身及子部门数据(如 `sys_org_code LIKE '当前部门编码%'`)。 --- ### **3. 常见问题排查** - **数据未隔离** 检查角色数据权限是否绑定到正确菜单,部门编码层级是否正确。 - **SQL 条件未生效** 查看执行 SQL 日志,确认 `sys_org_code` 条件是否自动注入。 - **自定义 SQL 处理** 若使用手写 SQL,需手动拼接 `${ew.customSqlSegment}` 继承数据权限条件: ```xml <select id="yourQuery"> SELECT * FROM your_table WHERE 1=1 <if test="ew.customSqlSegment != null"> ${ew.customSqlSegment} </if> </select> ``` --- ### **4. 扩展场景** - **跨部门数据共享**:通过“自定义部门”规则,手动指定多个部门节点。 - **字段级权限**:结合 `@PermissionData` 注解实现更细粒度的控制。 通过以上配置,JeecgBoot 可灵活实现多级部门的数据隔离,确保用户仅访问权限范围内的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员慕慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值