mirror of https://gitee.com/stylefeng/roses
【8.0】【role】更新获取当前用户角色的权限范围限制的方法
parent
007ea60454
commit
844379e6c0
|
@ -0,0 +1,30 @@
|
|||
package cn.stylefeng.roses.kernel.sys.api;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 获取角色的权限列表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 21:43
|
||||
*/
|
||||
public interface SysRoleLimitServiceApi {
|
||||
|
||||
/**
|
||||
* 获取角色的限制列表(包含菜单id和菜单功能id)
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 14:19
|
||||
*/
|
||||
Set<Long> getRoleBindLimitList(Long roleId);
|
||||
|
||||
/**
|
||||
* 获取角色的限制列表(包含菜单id和菜单功能id)
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 14:19
|
||||
*/
|
||||
Set<Long> getRoleBindLimitList(List<Long> roleIdList);
|
||||
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.sys.api;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 单独编写用户角色关联关系的Api
|
||||
|
@ -26,4 +27,21 @@ public interface SysUserRoleServiceApi {
|
|||
*/
|
||||
List<Long> findUserIdsByRoleId(Long roleId);
|
||||
|
||||
/**
|
||||
* 获取用户的角色范围列表,角色范围指用户的角色可分配的权限列表
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 21:41
|
||||
*/
|
||||
Set<Long> findUserRoleLimitScope(Long userId);
|
||||
|
||||
/**
|
||||
* 获取当前登录用户的角色范围列表,角色范围指用户的角色可分配的权限列表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 21:41
|
||||
*/
|
||||
Set<Long> findCurrentUserRoleLimitScope();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.user.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
||||
import cn.stylefeng.roses.kernel.event.sdk.publish.BusinessEventPublisher;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysRoleLimitServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
|
||||
|
@ -46,6 +48,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
|||
@Resource(name = "userRoleCache")
|
||||
private CacheOperatorApi<List<Long>> userRoleCache;
|
||||
|
||||
@Resource
|
||||
private SysRoleLimitServiceApi sysRoleLimitServiceApi;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void bindRoles(SysUserRoleRequest sysUserRoleRequest) {
|
||||
|
@ -155,6 +160,24 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
|||
return list.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> findUserRoleLimitScope(Long userId) {
|
||||
|
||||
// 获取用户的所有角色id
|
||||
List<Long> userRoleIdList = this.getUserRoleIdList(userId);
|
||||
|
||||
// 获取角色的限制范围列表(菜单和菜单功能id集合)
|
||||
return this.sysRoleLimitServiceApi.getRoleBindLimitList(userRoleIdList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> findCurrentUserRoleLimitScope() {
|
||||
|
||||
Long userId = LoginContext.me().getLoginUser().getUserId();
|
||||
|
||||
return this.findUserRoleLimitScope(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建查询wrapper
|
||||
*
|
||||
|
|
|
@ -78,6 +78,15 @@ public interface SysMenuService extends IService<SysMenu>, SysMenuServiceApi {
|
|||
*/
|
||||
List<SysMenu> getTotalMenus();
|
||||
|
||||
/**
|
||||
* 获取所有的菜单信息,用在角色绑定权限界面
|
||||
*
|
||||
* @param limitMenuIds 指定筛选的菜单的范围
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/15 9:24
|
||||
*/
|
||||
List<SysMenu> getTotalMenus(List<Long> limitMenuIds);
|
||||
|
||||
/**
|
||||
* 调整菜单上下级结构和菜单的顺序
|
||||
*
|
||||
|
|
|
@ -157,6 +157,18 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return this.list(menuLambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> getTotalMenus(List<Long> limitMenuIds) {
|
||||
if (ObjectUtil.isEmpty(limitMenuIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
LambdaQueryWrapper<SysMenu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId, SysMenu::getAppId);
|
||||
menuLambdaQueryWrapper.in(SysMenu::getMenuId, limitMenuIds);
|
||||
menuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||
return this.list(menuLambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateMenuTree(SysMenuRequest sysMenuRequest) {
|
||||
|
@ -201,9 +213,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
// 查询指定的菜单内容
|
||||
sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getMenuPids, SysMenu::getAppId,
|
||||
SysMenu::getMenuCode,
|
||||
SysMenu::getMenuName, SysMenu::getMenuType, SysMenu::getAntdvIcon, SysMenu::getAntdvVisible, SysMenu::getAntdvActiveUrl,
|
||||
SysMenu::getAntdvRouter, SysMenu::getAntdvComponent, SysMenu::getMenuSort);
|
||||
SysMenu::getMenuCode, SysMenu::getMenuName, SysMenu::getMenuType, SysMenu::getAntdvIcon, SysMenu::getAntdvVisible,
|
||||
SysMenu::getAntdvActiveUrl, SysMenu::getAntdvRouter, SysMenu::getAntdvComponent, SysMenu::getMenuSort);
|
||||
|
||||
sysMenuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||
|
||||
|
|
|
@ -1,19 +1,18 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.role.service;
|
||||
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysRoleLimitServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 角色权限限制 服务类
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2023/09/08 12:55
|
||||
*/
|
||||
public interface SysRoleLimitService extends IService<SysRoleLimit> {
|
||||
public interface SysRoleLimitService extends IService<SysRoleLimit>, SysRoleLimitServiceApi {
|
||||
|
||||
/**
|
||||
* 获取角色绑定的权限限制列表
|
||||
|
@ -31,12 +30,4 @@ public interface SysRoleLimitService extends IService<SysRoleLimit> {
|
|||
*/
|
||||
void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest);
|
||||
|
||||
/**
|
||||
* 获取角色的限制列表(包含菜单id和菜单功能id)
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/9/8 14:19
|
||||
*/
|
||||
Set<Long> getRoleBindLimitList(Long roleId);
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
||||
|
@ -65,9 +66,18 @@ public class SysRoleLimitServiceImpl extends ServiceImpl<SysRoleLimitMapper, Sys
|
|||
*/
|
||||
@Override
|
||||
public Set<Long> getRoleBindLimitList(Long roleId) {
|
||||
return this.getRoleBindLimitList(ListUtil.toList(roleId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> getRoleBindLimitList(List<Long> roleIdList) {
|
||||
if (ObjectUtil.isEmpty(roleIdList)) {
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysRoleLimit> sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysRoleLimitLambdaQueryWrapper.select(SysRoleLimit::getBusinessId);
|
||||
sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId);
|
||||
sysRoleLimitLambdaQueryWrapper.in(SysRoleLimit::getRoleId, roleIdList);
|
||||
List<SysRoleLimit> sysRoleMenuList = this.list(sysRoleLimitLambdaQueryWrapper);
|
||||
if (ObjectUtil.isEmpty(sysRoleMenuList)) {
|
||||
return new HashSet<>();
|
||||
|
|
Loading…
Reference in New Issue