【8.0】【role】更新获取当前用户角色的权限范围限制的方法

pull/57/head
fengshuonan 2023-09-08 21:50:55 +08:00
parent 007ea60454
commit 844379e6c0
7 changed files with 107 additions and 15 deletions

View File

@ -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 {
/**
* idid
*
* @author fengshuonan
* @since 2023/9/8 14:19
*/
Set<Long> getRoleBindLimitList(Long roleId);
/**
* idid
*
* @author fengshuonan
* @since 2023/9/8 14:19
*/
Set<Long> getRoleBindLimitList(List<Long> roleIdList);
}

View File

@ -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();
}

View File

@ -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
*

View File

@ -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);
/**
*
*

View File

@ -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);

View File

@ -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);
/**
* idid
*
* @author fengshuonan
* @since 2023/9/8 14:19
*/
Set<Long> getRoleBindLimitList(Long roleId);
}

View File

@ -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<>();