fix(2227-permissionQuery): 增加页面权限查询

This commit is contained in:
zhansihu 2024-04-09 16:57:48 +08:00
parent ebed487c99
commit ce93e4d1d8
9 changed files with 123 additions and 0 deletions

View File

@ -2,6 +2,8 @@ package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.req.NavTreeReq;
import cn.axzo.tyr.client.model.req.PagePermissionReq;
import cn.axzo.tyr.client.model.req.PagePermissionResp;
import cn.axzo.tyr.client.model.req.PermissionCheckReq;
import cn.axzo.tyr.client.model.res.NavTreeResp;
import org.springframework.cloud.openfeign.FeignClient;
@ -25,6 +27,10 @@ public interface PermissionQueryApi {
@PostMapping(value = "/api/v3/permission/query/getNavTree")
ApiResult<List<NavTreeResp>> getNavTree(@RequestBody @Valid NavTreeReq req);
/** 页面权限详情:页面自身及所有下级 **/
@PostMapping(value = "/api/v3/permission/query/getPagePermission")
ApiResult<List<PagePermissionResp>> getPagePermission(@RequestBody @Valid PagePermissionReq req);
/** 鉴权接口 **/
@PostMapping(value = "/api/v3/permission/query/hasPermission")
ApiResult<Boolean> hasPermission(PermissionCheckReq req);

View File

@ -0,0 +1,38 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 页面权限查询请求
*
* @version V1.0
* @author: ZhanSiHu
* @date: 2024/4/9 16:09
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PagePermissionReq {
@NotNull(message = "权限码不能为空")
private String featureCode;
@NotNull(message = "人员ID不能为空")
private Long personId;
/** 登录端 **/
@NotNull(message = "登录端不能为空")
private String terminal;
@NotEmpty(message = "单位标识对不能为空")
private List<WorkspaceOUPair> workspaceOUPairs;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.tyr.client.model.req;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 页面权限查询响应
*
* @version V1.0
* @author: ZhanSiHu
* @date: 2024/4/9 16:14
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PagePermissionResp {
/** 权限ID **/
private Long featureId;
/** 权限编码 **/
private String featureCode;
}

View File

@ -3,6 +3,8 @@ package cn.axzo.tyr.server.controller.permission;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.PermissionQueryApi;
import cn.axzo.tyr.client.model.req.NavTreeReq;
import cn.axzo.tyr.client.model.req.PagePermissionReq;
import cn.axzo.tyr.client.model.req.PagePermissionResp;
import cn.axzo.tyr.client.model.req.PermissionCheckReq;
import cn.axzo.tyr.client.model.res.NavTreeResp;
import cn.axzo.tyr.server.service.PermissionQueryService;
@ -31,6 +33,11 @@ public class PermissionQueryController implements PermissionQueryApi {
return ApiResult.ok(permissionService.getNavTree(req));
}
@Override
public ApiResult<List<PagePermissionResp>> getPagePermission(PagePermissionReq req) {
return ApiResult.ok(permissionService.getPagePermission(req));
}
@Override
public ApiResult<Boolean> hasPermission(PermissionCheckReq req) {
return ApiResult.ok(permissionService.hasPermission(req));

View File

@ -30,4 +30,7 @@ public class ResourcePermissionQueryDTO {
private List<Integer> authType;
/** 路径包含 **/
private Long inPath;
}

View File

@ -1,6 +1,8 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.req.NavTreeReq;
import cn.axzo.tyr.client.model.req.PagePermissionReq;
import cn.axzo.tyr.client.model.req.PagePermissionResp;
import cn.axzo.tyr.client.model.req.PermissionCheckReq;
import cn.axzo.tyr.client.model.res.NavTreeResp;
@ -19,4 +21,6 @@ public interface PermissionQueryService {
List<NavTreeResp> getNavTree(NavTreeReq req);
boolean hasPermission(PermissionCheckReq req);
List<PagePermissionResp> getPagePermission(PagePermissionReq req);
}

View File

@ -25,4 +25,6 @@ public interface SaasFeatureResourceService {
/** 是否免授权 **/
boolean isAuthFree(Long featureId);
SaasFeatureResource getByCode(String featureCode);
}

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.common.util.NumberUtil;
import cn.axzo.basics.common.util.TreeUtil;
import cn.axzo.framework.auth.domain.TerminalInfo;
@ -9,6 +10,8 @@ import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
import cn.axzo.tyr.client.model.enums.IdentityType;
import cn.axzo.tyr.client.model.req.NavTreeReq;
import cn.axzo.tyr.client.model.req.PagePermissionReq;
import cn.axzo.tyr.client.model.req.PagePermissionResp;
import cn.axzo.tyr.client.model.req.PermissionCheckReq;
import cn.axzo.tyr.client.model.res.NavTreeResp;
import cn.axzo.tyr.server.model.PermissionDO;
@ -102,6 +105,34 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
return resourcePermissions.stream().anyMatch(r -> featureIds.contains(r.getId()));
}
@Override
public List<PagePermissionResp> getPagePermission(PagePermissionReq req) {
//这里没有区分是否为页面的组件或菜单树下级 同时包含了页面自身
//权限编码转ID
SaasFeatureResource page = featureResourceService.getByCode(req.getFeatureCode());
AssertUtil.notNull(page, "权限码不存在");
//所有子级
ResourcePermissionQueryDTO param = ResourcePermissionQueryDTO.builder().inPath(page.getId()).build();
List<ResourcePermission> resourceList = featureResourceService.permissionQuery(param);
PermissionQueryContext context = PermissionQueryContext.builder()
.terminal(req.getTerminal())
.workspaceOUPairs(req.getWorkspaceOUPairs())
.build()
.appendPersonId(req.getPersonId());
//查询权限
List<PermissionDO> permissions = queryUserPermission(context);
Set<Long> featureIds = permissions.stream().map(PermissionDO::getFeatureIds).flatMap(Set::stream).collect(Collectors.toSet());
//权限过滤
return resourceList.stream()
.filter(r -> featureIds.contains(r.getId()))
.map(r -> PagePermissionResp.builder()
.featureId(r.getId())
.featureCode(r.getFeatureCode()).build())
.collect(Collectors.toList());
}
private List<PermissionDO> queryUserPermission(PermissionQueryContext context) {
//查询用户具有的角色

View File

@ -69,6 +69,7 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
.in(CollectionUtil.isNotEmpty(param.getFeatureTypes()), SaasFeatureResource::getFeatureType, param.getFeatureTypes())
.in(CollectionUtil.isNotEmpty(param.getFeatureCodes()), SaasFeatureResource::getFeatureCode, param.getFeatureCodes())
.in(CollectionUtil.isNotEmpty(param.getTerminals()), SaasFeatureResource::getTerminal, param.getTerminals())
.apply(Objects.nonNull(param.getInPath()), " FIND_IN_SET(" + param.getInPath() + ", path)")
.list();
return BeanMapper.copyList(resourceList, ResourcePermission.class);
}
@ -93,6 +94,11 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
return RedisClient.SetOps.sIsMember(KEY_AUTH_FREE, featureId);
}
@Override
public SaasFeatureResource getByCode(String featureCode) {
return featureResourceDao.getByCode(featureCode);
}
@Override
public void saveOrUpdateMenu(FeatureResourceTreeSaveReq req) {
SaasFeatureResource baseResource = BeanMapper.copyBean(req, SaasFeatureResource.class);