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