JEECGboot数据规则篇

使用

一、功能说明

列表数据权限,主要通过数据权限控制行数据,让不同的人有不同的查看数据规则;
比如: 销售人员只能看自己的数据;销售经理可以看所有下级销售人员的数据;财务只看金额大于5000的数据等等;

二、规则字段配置说明(非常重要):

①条件规则:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
②规则值:指定值 ( 固定值/系统上下文变量 )
日期默认值格式:2020-04-10
时间默认值格式:2020-04-13 12:00:00
③条件规则是包含: 规则值用逗号分隔
1.当前用户上下文变量
注意:数据权限配置,规则值可以填写系统上下文变量(当前登录人信息),从而根据当前登录人信息进行权限控制。

三、编码 描述(动态)

sys_user_code 当前登录用户登录账号
sys_user_name 当前登录用户真实名称
sys_date 当前系统日期
sys_time 当前系统时间
sys_org_code 当前登录用户部门编号
sys_multi_org_code 当前登录用户拥有的所有机构编码,逗号分隔
tenant_id 当前登录用户租户ID 要求:3.4.5 版本+

规则值,配置写法如下:#{sys_user_code}

注意:如果需要通过当前登录人、登录部门,进行数据权限控制,则业务表必须有以下系统标准字段;比如:创建人,创建时间,创建人所属部门,有了这些标准字段,就可以通过当前登录人进行数据隔离控制;

银轮为例:
订单池订单输入页面要控制普通人员自己只能看自己录入的,
计划员可以看自己部门的。

1:建表时,在数据库表中必须有创建人编号,部门编号。
2:在页面中配置数据规则:
在这里插入图片描述
在这里插入图片描述

3:在需要约束数据权限的页面的查询接口上开启使用数据权限:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个语句内部去查了数据权限,必须写!不写数据权限不会起作用。
最后根据构造的查询器执行查询就可以根据权限查出数据了。

原理

一:数据权限获取:**

1:切注解
使用切面:切注解:@PermissionData

public Object arround(ProceedingJoinPoint point)
ProceedingJoinPoint point

2:参数准备
获取切面 被切的注解

Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();

        if (method != null)
        {
            xxxxxx annoObj= method.getAnnotation(xxxxxx.class);
        }
        return null;

3:查询数据权限(根据获取的注解的参数,用户数据。
当注解中没有配置参数时,会使用requestPath不过此时就是另一种配置权限的方式了)

//
List<SysPermissionDataRuleModel> dataRules = commonAPI.queryPermissionDataRule(component, requestPath, username);
if(dataRules!=null && dataRules.size()>0) {
            /**
             * 临时存储,  往请求里面,传入数据查询条件 request.setAttribute(MENU_DATA_AUTHOR_RULES, dataRules); 在后面会再从request中取出来使用
             */
            JeecgDataAutorUtils.installDataSearchConditon(request, dataRules);
            SysUserCacheInfo userinfo = commonAPI.getCacheUser(username);
            JeecgDataAutorUtils.installUserInfo(request, userinfo);
        }

4:执行查询并存储入request
JeecgDataAutorUtils.installDataSearchConditon(request, dataRules); request.setAttribute(MENU_DATA_AUTHOR_RULES, list);

/**
	 * 往链接请求里面,传入数据查询条件
	 * 
	 * @param request
	 * @param dataRules
	 */
	public static synchronized void installDataSearchConditon(HttpServletRequest request, List<SysPermissionDataRuleModel> dataRules) {
		@SuppressWarnings("unchecked")
		List<SysPermissionDataRuleModel> list = (List<SysPermissionDataRuleModel>)loadDataSearchConditon();// 1.先从request获取MENU_DATA_AUTHOR_RULES,如果存则获取到LIST
		if (list==null) {
			// 2.如果不存在,则new一个list
			list = new ArrayList<SysPermissionDataRuleModel>();
		}
		for (SysPermissionDataRuleModel tsDataRule : dataRules) {
			list.add(tsDataRule);
		}
		request.setAttribute(MENU_DATA_AUTHOR_RULES, list); // 3.往list里面增量存指
	}

二:数据规则进行拼接


QueryGenerator.applyPermissionWrapper(autoQueryWrappe

/**   
	 * 获取请求对应的数据权限规则
	 * 
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static synchronized List<SysPermissionDataRuleModel> loadDataSearchConditon() {
		return (List<SysPermissionDataRuleModel>) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES);
				
	}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值