部门结构变化权限如何控制 - xinwu-yang/cube-java GitHub Wiki

Since 2.5.x 如果部门结构经常变动,如果采用原来方式会导致业务表的sysOrgCode无法跟随其部门结构变化而变化。

  1. 外键还是使用部门id
@DBField(length = 64)
@FormField(title = "所属部门", groupId = 1, component = ComponentType.SELECT_DEPART)
@Dict(table = "sys_depart", value = "id", text = "depart_name")
private String departId;
  1. 实体上注解 @EnableOrgCodeView
@Data
@ForcedSync
@EnableOrgCodeView
@TableName("week_report")
@SubTables(WeekPlan.class)
@Form(isGroup = true, description = "周报")
@QueryFields({@QueryField(label = "标题", value = "title", component = ComponentType.STRING)})
@Groups({@Group(id = 1, name = "基础信息"), @Group(id = 2, name = "周报信息")})
public class WeekReport implements Serializable {
  1. application配置文件配置需要使用视图的表
cube:
  permission:
    orgcode:
	  # 是否替换sql中全部表名
      replaceAll: true
      tables:
        - week_report
  1. 创建业务表视图

视图名必须是业务表名 + ‘_view’

CREATE VIEW `cube`.`week_report_view` AS SELECT
	wr.*,
	sd.org_code
FROM
	week_report wr
	LEFT JOIN sys_depart sd ON wr.depart_id = sd.id;
  1. 在菜单中添加数据权限并授权给角色

规则字段必须叫 orgCode 和 视图的 org_code 对应上

  1. API接口上配置注解 @PermissionData
    @GetMapping("/list")
    @PermissionData("modules/weekplan/WeekReportList")
    public Result<?> queryPageList(WeekReport weekReport,
                                   @RequestParam(defaultValue = "1") Integer pageNo,
                                   @RequestParam(defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<WeekReport> queryWrapper = QueryGenerator.initQueryWrapper(weekReport, req.getParameterMap());
        Page<WeekReport> page = new Page<>(pageNo, pageSize);
        IPage<WeekReport> pageList = weekReportService.page(page, queryWrapper);
        return Result.ok(pageList);
    }

配置成功后调用查询 API 就可以在 SQL 看到权限条件已经加上了

⚠️ **GitHub.com Fallback** ⚠️