mirror of https://gitee.com/stylefeng/roses
【8.0】【role】更新角色绑定数据权限接口
parent
e8b52f312b
commit
e2364f17c3
|
@ -118,6 +118,11 @@ public interface PermissionCodeConstants {
|
|||
*/
|
||||
String CHANGE_ROLE_PERMISSION = "CHANGE_ROLE_PERMISSION";
|
||||
|
||||
/**
|
||||
* 权限管理界面-修改数据范围
|
||||
*/
|
||||
String CHANGE_ROLE_DATA_SCOPE = "CHANGE_ROLE_DATA_SCOPE";
|
||||
|
||||
/**
|
||||
* 菜单管理整个界面的权限标识
|
||||
*/
|
||||
|
|
|
@ -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<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue