|
|
|
@ -41,6 +41,7 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.validation.constraints.NotEmpty; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
@ -78,6 +79,10 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
|
|
|
|
|
@Override |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) { |
|
|
|
|
return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) { |
|
|
|
|
// 删除角色配置的菜单集合
|
|
|
|
|
roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds)); |
|
|
|
|
// 组装配置
|
|
|
|
@ -90,7 +95,26 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
|
|
|
|
|
})); |
|
|
|
|
// 新增配置
|
|
|
|
|
roleMenuService.saveBatch(roleMenus); |
|
|
|
|
// 递归设置下属角色菜单集合
|
|
|
|
|
recursionRoleMenu(roleIds, menuIds); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) { |
|
|
|
|
roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> { |
|
|
|
|
List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId())); |
|
|
|
|
// 子节点过滤出父节点删除的菜单集合
|
|
|
|
|
List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList()); |
|
|
|
|
if (collectRoleMenuIds.size() > 0) { |
|
|
|
|
// 删除子节点权限外的菜单集合
|
|
|
|
|
roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds)); |
|
|
|
|
// 递归设置下属角色菜单集合
|
|
|
|
|
recursionRoleMenu(Collections.singletonList(role.getId()), menuIds); |
|
|
|
|
} |
|
|
|
|
})); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) { |
|
|
|
|
// 删除角色配置的数据权限集合
|
|
|
|
|
roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds)); |
|
|
|
|
// 组装配置
|
|
|
|
@ -104,7 +128,10 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
|
|
|
|
|
})); |
|
|
|
|
// 新增配置
|
|
|
|
|
roleScopeService.saveBatch(roleDataScopes); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) { |
|
|
|
|
// 删除角色配置的接口权限集合
|
|
|
|
|
roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds)); |
|
|
|
|
// 组装配置
|
|
|
|
@ -118,7 +145,6 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
|
|
|
|
|
})); |
|
|
|
|
// 新增配置
|
|
|
|
|
roleScopeService.saveBatch(roleApiScopes); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|