Metrics
0
Watch 2.8K Star 5.7K Fork 2.8K

ThinkGem / JeeSite 4.xJavaAGPL-3.0

数据权限过滤特殊情况

Open
wangxiongying  Created at

该问题是怎么引起的?

1.新增机构(office)
2.授权给用户查看权限(js_sys_user_data_scope有记录)
3.未授权任何角色该机构任何权限(js_sys_role_data_scope无记录)。
4.查询业务表记录通过join方式增加数据权限过滤

//添加数据权限过滤
entity.getSqlMap().getDataScope().addFilter("dsfOffice", "Office", "SE.OFFICE_CODE", DataScope.CTRL_PERMI_HAVE);
return super.findPage(entity);

5.查询无结果,但实际应该有结果。
6.查明原因,生成的数据权限过滤sql为

JOIN js_sys_user_data_scope aLku2 ON aLku2.ctrl_data = SE.OFFICE_CODE
JOIN js_sys_role_data_scope ao3ut ON ao3ut.ctrl_data = SE.OFFICE_CODE
WHERE 1=1
AND (
	( aLku2.ctrl_permi = '1'
		AND aLku2.ctrl_type = 'Office'
		AND aLku2.user_code = 'testuser'
	)OR(
		(ao3ut.ctrl_permi = '1'
		AND ao3ut.ctrl_type = 'Office'
		AND ao3ut.role_code IN ('test_role'))
	)
)

此机构新增后还未给任何角色授予访问权限,js_sys_role_data_scope 表中无任何相关记录。

'JOIN js_sys_role_data_scope ao3ut ON ao3ut.ctrl_data = SE.OFFICE_CODE'

将所有记录全部排除

为避免上述问题,首先要保证你控制的数据在js_sys_user_data_scope 与 js_sys_role_data_scope 这两张表中至少各有一条相关记录,否则join会将所有数据直接排除

total 1 participants

Comments (0)

Sign in and comment

Assignee
Labels
Not set
Project
Milestone
Branch
Scheduled start
Not set
Scheduled end
Not set
Top level
Priority

Help Search

183227_9af5e6a8_1826025 111910_4d91f001_1826025