[[data-permission]]
= 数据权限使用说明
接口封装在PermissionService中

* getDataRuleTargets
* getDataRuleTargetsByIdentifier
* getDataRuleSubqueryCondition
* getDataRuleDefaultCondition
* getDataRuleJoinCondition

== 方式一
直接获取当前用户的数据权限集合,使用接口getDataRuleTargetsByIdentifier

[source,java]
----
	//数据权限
	Set<Long> targets = permissionService.getDataRuleTargetsByIdentifier("sys:user:list");
	//TODO 加入业务查询条件中
----

== 方式二
结合权限注解，自动获取当前请求的数据权限集合或查询条件

1.添加注解@RequiresDataAccess  value-权限标识 ,prop-业务实体中部门属性的名称
[source,java]
----
	@RequiresDataAccess(value="sys:permission:list",prop="target")
	@RequestMapping(value = "", method = RequestMethod.GET)
	public String permissions(String queryName, Pageable pageable) {
		Page<Permission> permissios = permissionService.findAllWithPage(queryName, pageable);
		return DtoWrapper.wrapper(permissios)
				.toJSONString();
	}
----

2.Service获取数据权限集合

[source,java]
----
	//数据权限
	Set<Long> dataRuleTargets = permissionService.getDataRuleTargets();
	//TODO 加入业务查询条件中
----

3.Service获取数据权限集合条件

[source,java]
----
	public Page<Permission> findAllWithPage(String queryName, Pageable pageable) {
		return repository.findAll((root, query, cb) -> {
			List<Predicate> list = new ArrayList<Predicate>();
			
			//数据权限
			Predicate dataRuleJoinCondition = this.getDataRuleDefaultCondition(root, query, cb);
			if (dataRuleJoinCondition != null) {
				list.add(dataRuleJoinCondition);
			}
			
			query.orderBy(cb.desc(root.get("lastModifiedDate")));
			return cb.and(list.toArray(new Predicate[list.size()]));
		}, pageable);
	}
----

