【8.0】【role】更新角色绑定数据权限接口

pull/57/head
fengshuonan 2023-07-16 23:55:20 +08:00
parent e8b52f312b
commit e2364f17c3
7 changed files with 106 additions and 11 deletions

View File

@ -118,6 +118,11 @@ public interface PermissionCodeConstants {
*/
String CHANGE_ROLE_PERMISSION = "CHANGE_ROLE_PERMISSION";
/**
* -
*/
String CHANGE_ROLE_DATA_SCOPE = "CHANGE_ROLE_DATA_SCOPE";
/**
*
*/

View File

@ -100,4 +100,18 @@ public class PermissionAssignController {
return new SuccessResponseData<>(roleBindDataScopeResponse);
}
/**
*
*
* @author fengshuonan
* @since 2023/7/16 23:40
*/
@PostResource(name = "角色绑定数据权限的配置", path = "/permission/updateRoleBindDataScope", requiredPermission = true,
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_DATA_SCOPE)
public ResponseData<?> updateRoleBindDataScope(
@RequestBody @Validated(RoleBindDataScopeRequest.roleBindDataScope.class) RoleBindDataScopeRequest roleBindDataScopeRequest) {
sysRoleDataScopeService.updateRoleBindDataScope(roleBindDataScopeRequest);
return new SuccessResponseData<>();
}
}

View File

@ -45,13 +45,14 @@ public class RoleBindDataScopeRequest extends BaseRequest {
/**
* id
*/
@NotNull(message = "角色id不能为空", groups = {detail.class})
@NotNull(message = "角色id不能为空", groups = {detail.class, roleBindDataScope.class})
@ChineseDescription("角色id")
private Long roleId;
/**
* 10-20-30-40-50-
*/
@NotNull(message = "数据范围类型不能为空", groups = {roleBindDataScope.class})
@ChineseDescription("数据范围类型10-仅本人数据20-本部门数据30-本部门及以下数据40-指定部门数据50-全部数据")
private Integer dataScopeType;
@ -61,4 +62,11 @@ public class RoleBindDataScopeRequest extends BaseRequest {
@ChineseDescription("用户拥有的指定部门的组织机构信息id集合")
private List<Long> orgIdList;
/**
*
*/
public @interface roleBindDataScope {
}
}

View File

@ -81,4 +81,12 @@ public interface SysRoleDataScopeService extends IService<SysRoleDataScope> {
*/
RoleBindDataScopeResponse getRoleBindDataScope(RoleBindDataScopeRequest roleBindDataScopeRequest);
/**
*
*
* @author fengshuonan
* @since 2023/7/16 23:42
*/
void updateRoleBindDataScope(RoleBindDataScopeRequest roleBindDataScopeRequest);
}

View File

@ -90,4 +90,14 @@ public interface SysRoleService extends IService<SysRole>, SysRoleServiceApi {
*/
Integer getRoleDataScopeType(Long roleId);
/**
*
*
* @param roleId id
* @param dataScopeType
* @author fengshuonan
* @since 2023/7/16 23:28
*/
void updateRoleDataScopeType(Long roleId, Integer dataScopeType);
}

View File

@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
@ -88,23 +89,58 @@ public class SysRoleDataScopeServiceImpl extends ServiceImpl<SysRoleDataScopeMap
Integer dataScopeType = sysRoleService.getRoleDataScopeType(roleBindDataScopeRequest.getRoleId());
roleBindDataScopeResponse.setDataScopeType(dataScopeType);
if (!DataScopeTypeEnum.DEFINE.getCode().equals(dataScopeType)) {
return roleBindDataScopeResponse;
}
// 如果是指定部门则获取指定部门的orgId集合
if (DataScopeTypeEnum.DEFINE.getCode().equals(dataScopeType)) {
LambdaQueryWrapper<SysRoleDataScope> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRoleDataScope::getRoleId, roleBindDataScopeRequest.getRoleId());
wrapper.select(SysRoleDataScope::getOrganizationId);
List<SysRoleDataScope> sysRoleDataScopes = this.list(wrapper);
LambdaQueryWrapper<SysRoleDataScope> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRoleDataScope::getRoleId, roleBindDataScopeRequest.getRoleId());
wrapper.select(SysRoleDataScope::getOrganizationId);
List<SysRoleDataScope> sysRoleDataScopes = this.list(wrapper);
if (ObjectUtil.isNotEmpty(sysRoleDataScopes)) {
List<Long> scopeOrgIdList = sysRoleDataScopes.stream().map(SysRoleDataScope::getOrganizationId).collect(Collectors.toList());
roleBindDataScopeResponse.setOrgIdList(scopeOrgIdList);
}
if (ObjectUtil.isNotEmpty(sysRoleDataScopes)) {
List<Long> scopeOrgIdList = sysRoleDataScopes.stream().map(SysRoleDataScope::getOrganizationId).collect(Collectors.toList());
roleBindDataScopeResponse.setOrgIdList(scopeOrgIdList);
}
return roleBindDataScopeResponse;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRoleBindDataScope(RoleBindDataScopeRequest roleBindDataScopeRequest) {
// 更新角色的数据权限类型
Integer dataScopeType = roleBindDataScopeRequest.getDataScopeType();
this.sysRoleService.updateRoleDataScopeType(roleBindDataScopeRequest.getRoleId(), dataScopeType);
// 非指定部门,直接返回
if (!DataScopeTypeEnum.DEFINE.getCode().equals(dataScopeType)) {
return;
}
// 如果是指定部门的话,则更新角色关联的指定部门的信息
List<Long> orgIdList = roleBindDataScopeRequest.getOrgIdList();
if (ObjectUtil.isEmpty(orgIdList)) {
return;
}
// 先清空所有绑定,再添加所有绑定
LambdaQueryWrapper<SysRoleDataScope> removeWrapper = new LambdaQueryWrapper<>();
removeWrapper.eq(SysRoleDataScope::getRoleId, roleBindDataScopeRequest.getRoleId());
this.remove(removeWrapper);
ArrayList<SysRoleDataScope> bindRoleDataScopeList = new ArrayList<>();
for (Long orgId : orgIdList) {
SysRoleDataScope sysRoleDataScope = new SysRoleDataScope();
sysRoleDataScope.setRoleId(roleBindDataScopeRequest.getRoleId());
sysRoleDataScope.setOrganizationId(orgId);
bindRoleDataScopeList.add(sysRoleDataScope);
}
this.saveBatch(bindRoleDataScopeList);
}
@Override
public void validateHaveRoleBind(Set<Long> beRemovedRoleIdList) {
// none

View File

@ -19,6 +19,7 @@ import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMapper;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@ -131,6 +132,19 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return DataScopeTypeEnum.SELF.getCode();
}
@Override
public void updateRoleDataScopeType(Long roleId, Integer dataScopeType) {
if (ObjectUtil.isEmpty(roleId) || ObjectUtil.isEmpty(dataScopeType)) {
return;
}
LambdaUpdateWrapper<SysRole> sysRoleLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
sysRoleLambdaUpdateWrapper.eq(SysRole::getRoleId, roleId);
sysRoleLambdaUpdateWrapper.set(SysRole::getDataScopeType, dataScopeType);
this.update(sysRoleLambdaUpdateWrapper);
}
@Override
public List<SysRole> findList(SysRoleRequest sysRoleRequest) {
LambdaQueryWrapper<SysRole> wrapper = this.createWrapper(sysRoleRequest);