Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
b52a38d2
提交
b52a38d2
authored
6月 15, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成 RoleApi、PermissionApi 的 feign 支持
上级
84744938
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
83 行增加
和
78 行删除
+83
-78
DeptDataPermissionRule.java
...datapermission/core/rule/dept/DeptDataPermissionRule.java
+4
-1
DeptDataPermissionRuleTest.java
...permission/core/rule/dept/DeptDataPermissionRuleTest.java
+8
-6
SecurityFrameworkServiceImpl.java
...k/security/core/service/SecurityFrameworkServiceImpl.java
+7
-2
PermissionApi.java
...der/yudao/module/system/api/permission/PermissionApi.java
+27
-35
RoleApi.java
...n/iocoder/yudao/module/system/api/permission/RoleApi.java
+15
-13
PermissionApiImpl.java
...yudao/module/system/api/permission/PermissionApiImpl.java
+10
-14
RoleApiImpl.java
...coder/yudao/module/system/api/permission/RoleApiImpl.java
+12
-7
没有找到文件。
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java
浏览文件 @
b52a38d2
...
...
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.common.enums.UserTypeEnum
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.framework.common.util.collection.CollectionUtils
;
import
cn.iocoder.yudao.framework.common.util.json.JsonUtils
;
import
cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule
;
...
...
@@ -105,7 +106,9 @@ public class DeptDataPermissionRule implements DataPermissionRule {
DeptDataPermissionRespDTO
deptDataPermission
=
loginUser
.
getContext
(
CONTEXT_KEY
,
DeptDataPermissionRespDTO
.
class
);
// 从上下文中拿不到,则调用逻辑进行获取
if
(
deptDataPermission
==
null
)
{
deptDataPermission
=
permissionApi
.
getDeptDataPermission
(
loginUser
.
getId
());
CommonResult
<
DeptDataPermissionRespDTO
>
getDeptDataPermissionResult
=
permissionApi
.
getDeptDataPermission
(
loginUser
.
getId
());
getDeptDataPermissionResult
.
checkError
();
deptDataPermission
=
getDeptDataPermissionResult
.
getData
();
if
(
deptDataPermission
==
null
)
{
log
.
error
(
"[getExpression][LoginUser({}) 获取数据权限为 null]"
,
JsonUtils
.
toJsonString
(
loginUser
));
throw
new
NullPointerException
(
String
.
format
(
"LoginUser(%d) Table(%s/%s) 未返回数据权限"
,
...
...
yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleTest.java
浏览文件 @
b52a38d2
...
...
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.datapermission.core.rule.dept;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ReflectUtil
;
import
cn.iocoder.yudao.framework.common.enums.UserTypeEnum
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.framework.common.util.collection.SetUtils
;
import
cn.iocoder.yudao.module.system.api.permission.PermissionApi
;
import
cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO
;
...
...
@@ -19,6 +20,7 @@ import org.mockito.MockedStatic;
import
java.util.Map
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
pojo
.
CommonResult
.
success
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
datapermission
.
core
.
rule
.
dept
.
DeptDataPermissionRule
.
EXPRESSION_NULL
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
RandomUtils
.
randomPojo
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
test
.
core
.
util
.
RandomUtils
.
randomString
;
...
...
@@ -95,7 +97,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
securityFrameworkUtilsMock
.
when
(
SecurityFrameworkUtils:
:
getLoginUser
).
thenReturn
(
loginUser
);
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
().
setAll
(
true
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 调用
Expression
expression
=
rule
.
getExpression
(
tableName
,
tableAlias
);
...
...
@@ -118,7 +120,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
securityFrameworkUtilsMock
.
when
(
SecurityFrameworkUtils:
:
getLoginUser
).
thenReturn
(
loginUser
);
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
();
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 调用
Expression
expression
=
rule
.
getExpression
(
tableName
,
tableAlias
);
...
...
@@ -142,7 +144,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
()
.
setDeptIds
(
SetUtils
.
asSet
(
10L
,
20L
)).
setSelf
(
true
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 调用
Expression
expression
=
rule
.
getExpression
(
tableName
,
tableAlias
);
...
...
@@ -166,7 +168,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
()
.
setSelf
(
true
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 添加 user 字段配置
rule
.
addUserColumn
(
"t_user"
,
"id"
);
...
...
@@ -192,7 +194,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
()
.
setDeptIds
(
CollUtil
.
newLinkedHashSet
(
10L
,
20L
));
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 添加 dept 字段配置
rule
.
addDeptColumn
(
"t_user"
,
"dept_id"
);
...
...
@@ -218,7 +220,7 @@ class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
// mock 方法(DeptDataPermissionRespDTO)
DeptDataPermissionRespDTO
deptDataPermission
=
new
DeptDataPermissionRespDTO
()
.
setDeptIds
(
CollUtil
.
newLinkedHashSet
(
10L
,
20L
)).
setSelf
(
true
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
deptDataPermission
);
when
(
permissionApi
.
getDeptDataPermission
(
same
(
1L
))).
thenReturn
(
success
(
deptDataPermission
)
);
// 添加 user 字段配置
rule
.
addUserColumn
(
"t_user"
,
"id"
);
// 添加 dept 字段配置
...
...
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityFrameworkServiceImpl.java
浏览文件 @
b52a38d2
package
cn
.
iocoder
.
yudao
.
framework
.
security
.
core
.
service
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.framework.security.core.LoginUser
;
import
cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils
;
import
cn.iocoder.yudao.module.system.api.permission.PermissionApi
;
...
...
@@ -27,7 +28,9 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
@Override
public
boolean
hasAnyPermissions
(
String
...
permissions
)
{
return
permissionApi
.
hasAnyPermissions
(
getLoginUserId
(),
permissions
);
CommonResult
<
Boolean
>
hasAnyPermissionsResult
=
permissionApi
.
hasAnyPermissions
(
getLoginUserId
(),
permissions
);
hasAnyPermissionsResult
.
checkError
();
return
hasAnyPermissionsResult
.
getData
();
}
@Override
...
...
@@ -37,7 +40,9 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
@Override
public
boolean
hasAnyRoles
(
String
...
roles
)
{
return
permissionApi
.
hasAnyRoles
(
getLoginUserId
(),
roles
);
CommonResult
<
Boolean
>
hasAnyRolesResult
=
permissionApi
.
hasAnyRoles
(
getLoginUserId
(),
roles
);
hasAnyRolesResult
.
checkError
();
return
hasAnyRolesResult
.
getData
();
}
@Override
...
...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java
浏览文件 @
b52a38d2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
permission
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO
;
import
cn.iocoder.yudao.module.system.enums.ApiConstants
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -16,44 +20,32 @@ public interface PermissionApi {
String
PREFIX
=
ApiConstants
.
PREFIX
+
"/permission"
;
/**
* 获得拥有多个角色的用户编号集合
*
* @param roleIds 角色编号集合
* @return 用户编号集合
*/
@GetMapping
(
PREFIX
+
"/user-role-id-list-by-role-id"
)
Set
<
Long
>
getUserRoleIdListByRoleIds
(
Collection
<
Long
>
roleIds
);
/**
* 判断是否有权限,任一一个即可
*
* @param userId 用户编号
* @param permissions 权限
* @return 是否
*/
@ApiOperation
(
"获得拥有多个角色的用户编号集合"
)
@ApiImplicitParam
(
name
=
"roleIds"
,
value
=
"角色编号集合"
,
required
=
true
,
allowMultiple
=
true
)
CommonResult
<
Set
<
Long
>>
getUserRoleIdListByRoleIds
(
@RequestParam
(
"roleIds"
)
Collection
<
Long
>
roleIds
);
@GetMapping
(
PREFIX
+
"/has-any-permissions"
)
boolean
hasAnyPermissions
(
@RequestParam
(
"userId"
)
Long
userId
,
@RequestParam
(
"permissions"
)
String
...
permissions
);
/**
* 判断是否有角色,任一一个即可
*
* @param userId 用户编号
* @param roles 角色数组
* @return 是否
*/
@ApiOperation
(
"判断是否有权限,任一一个即可"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"userId"
,
value
=
"用户编号"
,
required
=
true
,
dataTypeClass
=
Long
.
class
),
@ApiImplicitParam
(
name
=
"permissions"
,
value
=
"权限"
,
required
=
true
,
allowMultiple
=
true
)
})
CommonResult
<
Boolean
>
hasAnyPermissions
(
@RequestParam
(
"userId"
)
Long
userId
,
@RequestParam
(
"permissions"
)
String
...
permissions
);
@GetMapping
(
PREFIX
+
"/has-any-roles"
)
boolean
hasAnyRoles
(
@RequestParam
(
"userId"
)
Long
userId
,
@RequestParam
(
"roles"
)
String
...
roles
);
/**
* 获得登陆用户的部门数据权限
*
* @param userId 用户编号
* @return 部门数据权限
*/
@ApiOperation
(
"判断是否有角色,任一一个即可"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"userId"
,
value
=
"用户编号"
,
required
=
true
,
dataTypeClass
=
Long
.
class
),
@ApiImplicitParam
(
name
=
"roles"
,
value
=
"角色数组"
,
required
=
true
,
allowMultiple
=
true
)
})
CommonResult
<
Boolean
>
hasAnyRoles
(
@RequestParam
(
"userId"
)
Long
userId
,
@RequestParam
(
"roles"
)
String
...
roles
);
@GetMapping
(
PREFIX
+
"/get-dept-data-permission"
)
DeptDataPermissionRespDTO
getDeptDataPermission
(
@RequestParam
(
"userId"
)
Long
userId
);
@ApiOperation
(
"获得登陆用户的部门数据权限"
)
@ApiImplicitParam
(
name
=
"userId"
,
value
=
"部门数据权限"
,
required
=
true
,
dataTypeClass
=
Long
.
class
)
CommonResult
<
DeptDataPermissionRespDTO
>
getDeptDataPermission
(
@RequestParam
(
"userId"
)
Long
userId
);
}
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java
浏览文件 @
b52a38d2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
permission
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.enums.ApiConstants
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
java.util.Collection
;
/**
* 角色 API 接口
*
* @author 芋道源码
*/
@FeignClient
(
name
=
ApiConstants
.
NAME
)
// TODO 芋艿:fallbackFactory =
@Api
(
tags
=
"RPC 服务 - 角色"
)
public
interface
RoleApi
{
/**
* 校验角色们是否有效。如下情况,视为无效:
* 1. 角色编号不存在
* 2. 角色被禁用
*
* @param ids 角色编号数组
*/
void
validRoles
(
Collection
<
Long
>
ids
);
String
PREFIX
=
ApiConstants
.
PREFIX
+
"/role"
;
@GetMapping
(
PREFIX
+
"/valid"
)
@ApiImplicitParam
(
name
=
"ids"
,
value
=
"角色编号数组"
,
required
=
true
,
allowMultiple
=
true
)
CommonResult
<
Boolean
>
validRoles
(
@RequestParam
(
"ids"
)
Collection
<
Long
>
ids
);
}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApiImpl.java
浏览文件 @
b52a38d2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
permission
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO
;
import
cn.iocoder.yudao.module.system.service.permission.PermissionService
;
import
org.apache.dubbo.config.annotation.DubboService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RestController
;
...
...
@@ -11,13 +11,9 @@ import javax.annotation.Resource;
import
java.util.Collection
;
import
java.util.Set
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
pojo
.
CommonResult
.*;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ApiConstants
.
VERSION
;
/**
* 权限 API 实现类
*
* @author 芋道源码
*/
@RestController
// 提供 RESTful API 接口,给 Feign 调用
@DubboService
(
version
=
VERSION
)
// 提供 Dubbo RPC 接口,给 Dubbo Consumer 调用
@Validated
...
...
@@ -27,23 +23,23 @@ public class PermissionApiImpl implements PermissionApi {
private
PermissionService
permissionService
;
@Override
public
Set
<
Long
>
getUserRoleIdListByRoleIds
(
Collection
<
Long
>
roleIds
)
{
return
permissionService
.
getUserRoleIdListByRoleIds
(
roleIds
);
public
CommonResult
<
Set
<
Long
>
>
getUserRoleIdListByRoleIds
(
Collection
<
Long
>
roleIds
)
{
return
success
(
permissionService
.
getUserRoleIdListByRoleIds
(
roleIds
)
);
}
@Override
public
boolean
hasAnyPermissions
(
Long
userId
,
String
...
permissions
)
{
return
permissionService
.
hasAnyPermissions
(
userId
,
permissions
);
public
CommonResult
<
Boolean
>
hasAnyPermissions
(
Long
userId
,
String
...
permissions
)
{
return
success
(
permissionService
.
hasAnyPermissions
(
userId
,
permissions
)
);
}
@Override
public
boolean
hasAnyRoles
(
Long
userId
,
String
...
roles
)
{
return
permissionService
.
hasAnyRoles
(
userId
,
roles
);
public
CommonResult
<
Boolean
>
hasAnyRoles
(
Long
userId
,
String
...
roles
)
{
return
success
(
permissionService
.
hasAnyRoles
(
userId
,
roles
)
);
}
@Override
public
DeptDataPermissionRespDTO
getDeptDataPermission
(
Long
userId
)
{
return
permissionService
.
getDeptDataPermission
(
userId
);
public
CommonResult
<
DeptDataPermissionRespDTO
>
getDeptDataPermission
(
Long
userId
)
{
return
success
(
permissionService
.
getDeptDataPermission
(
userId
)
);
}
}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java
浏览文件 @
b52a38d2
package
cn
.
iocoder
.
yudao
.
module
.
system
.
api
.
permission
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.module.system.service.permission.RoleService
;
import
org.apache.dubbo.config.annotation.DubboService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
java.util.Collection
;
/**
* 角色 API 实现类
*
* @author 芋道源码
*/
@
Service
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
pojo
.
CommonResult
.
success
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ApiConstants
.
VERSION
;
@RestController
// 提供 RESTful API 接口,给 Feign 调用
@DubboService
(
version
=
VERSION
)
// 提供 Dubbo RPC 接口,给 Dubbo Consumer 调用
@
Validated
public
class
RoleApiImpl
implements
RoleApi
{
@Resource
private
RoleService
roleService
;
@Override
public
void
validRoles
(
Collection
<
Long
>
ids
)
{
public
CommonResult
<
Boolean
>
validRoles
(
Collection
<
Long
>
ids
)
{
roleService
.
validRoles
(
ids
);
return
success
(
true
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论