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

View File

@ -81,4 +81,12 @@ public interface SysRoleDataScopeService extends IService<SysRoleDataScope> {
*/ */
RoleBindDataScopeResponse getRoleBindDataScope(RoleBindDataScopeRequest roleBindDataScopeRequest); 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); 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
@ -88,9 +89,11 @@ public class SysRoleDataScopeServiceImpl extends ServiceImpl<SysRoleDataScopeMap
Integer dataScopeType = sysRoleService.getRoleDataScopeType(roleBindDataScopeRequest.getRoleId()); Integer dataScopeType = sysRoleService.getRoleDataScopeType(roleBindDataScopeRequest.getRoleId());
roleBindDataScopeResponse.setDataScopeType(dataScopeType); roleBindDataScopeResponse.setDataScopeType(dataScopeType);
// 如果是指定部门则获取指定部门的orgId集合 if (!DataScopeTypeEnum.DEFINE.getCode().equals(dataScopeType)) {
if (DataScopeTypeEnum.DEFINE.getCode().equals(dataScopeType)) { return roleBindDataScopeResponse;
}
// 如果是指定部门则获取指定部门的orgId集合
LambdaQueryWrapper<SysRoleDataScope> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysRoleDataScope> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRoleDataScope::getRoleId, roleBindDataScopeRequest.getRoleId()); wrapper.eq(SysRoleDataScope::getRoleId, roleBindDataScopeRequest.getRoleId());
wrapper.select(SysRoleDataScope::getOrganizationId); wrapper.select(SysRoleDataScope::getOrganizationId);
@ -100,11 +103,44 @@ public class SysRoleDataScopeServiceImpl extends ServiceImpl<SysRoleDataScopeMap
List<Long> scopeOrgIdList = sysRoleDataScopes.stream().map(SysRoleDataScope::getOrganizationId).collect(Collectors.toList()); List<Long> scopeOrgIdList = sysRoleDataScopes.stream().map(SysRoleDataScope::getOrganizationId).collect(Collectors.toList());
roleBindDataScopeResponse.setOrgIdList(scopeOrgIdList); roleBindDataScopeResponse.setOrgIdList(scopeOrgIdList);
} }
}
return roleBindDataScopeResponse; 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 @Override
public void validateHaveRoleBind(Set<Long> beRemovedRoleIdList) { public void validateHaveRoleBind(Set<Long> beRemovedRoleIdList) {
// none // 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.pojo.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -131,6 +132,19 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return DataScopeTypeEnum.SELF.getCode(); 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 @Override
public List<SysRole> findList(SysRoleRequest sysRoleRequest) { public List<SysRole> findList(SysRoleRequest sysRoleRequest) {
LambdaQueryWrapper<SysRole> wrapper = this.createWrapper(sysRoleRequest); LambdaQueryWrapper<SysRole> wrapper = this.createWrapper(sysRoleRequest);