mirror of https://gitee.com/stylefeng/roses
【8.0】【role】完善绑定权限
parent
c98905a57c
commit
ffc00579e9
|
@ -17,6 +17,7 @@ import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissio
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.util.AssertAssignUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -84,6 +85,7 @@ public class RoleBindAppImpl implements RoleAssignOperateAction, RoleBindLimitAc
|
||||||
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
sysRoleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
sysRoleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
||||||
sysRoleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId, totalMenuOptionIds);
|
sysRoleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId, totalMenuOptionIds);
|
||||||
|
AssertAssignUtil.assertAssign(roleId, sysRoleMenuOptionsLambdaQueryWrapper);
|
||||||
sysRoleMenuOptionsService.remove(sysRoleMenuOptionsLambdaQueryWrapper);
|
sysRoleMenuOptionsService.remove(sysRoleMenuOptionsLambdaQueryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissio
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.util.AssertAssignUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -97,6 +98,7 @@ public class RoleBindMenuImpl implements RoleAssignOperateAction, RoleBindLimitA
|
||||||
LambdaQueryWrapper<SysRoleMenuOptions> roleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRoleMenuOptions> roleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
roleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
roleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
||||||
roleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId, menuOptions);
|
roleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId, menuOptions);
|
||||||
|
AssertAssignUtil.assertAssign(roleId, roleMenuOptionsLambdaQueryWrapper);
|
||||||
sysRoleMenuOptionsService.remove(roleMenuOptionsLambdaQueryWrapper);
|
sysRoleMenuOptionsService.remove(roleMenuOptionsLambdaQueryWrapper);
|
||||||
|
|
||||||
// 2.3. 如果是选中状态,则从新进行这些角色和功能的绑定
|
// 2.3. 如果是选中状态,则从新进行这些角色和功能的绑定
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleAssignOperateAction;
|
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleAssignOperateAction;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit;
|
||||||
|
@ -10,10 +12,12 @@ import cn.stylefeng.roses.kernel.sys.modular.role.enums.RoleLimitTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.util.AssertAssignUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,6 +35,9 @@ public class RoleBindOptionImpl implements RoleAssignOperateAction, RoleBindLimi
|
||||||
@Resource
|
@Resource
|
||||||
private SysRoleLimitService sysRoleLimitService;
|
private SysRoleLimitService sysRoleLimitService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysUserRoleServiceApi sysUserRoleServiceApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PermissionNodeTypeEnum getNodeType() {
|
public PermissionNodeTypeEnum getNodeType() {
|
||||||
return PermissionNodeTypeEnum.OPTIONS;
|
return PermissionNodeTypeEnum.OPTIONS;
|
||||||
|
@ -53,6 +60,14 @@ public class RoleBindOptionImpl implements RoleAssignOperateAction, RoleBindLimi
|
||||||
sysRoleMenuOptions.setMenuOptionId(menuOptionId);
|
sysRoleMenuOptions.setMenuOptionId(menuOptionId);
|
||||||
this.sysRoleMenuOptionsService.save(sysRoleMenuOptions);
|
this.sysRoleMenuOptionsService.save(sysRoleMenuOptions);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
// 当前正在进行的角色,不能禁用掉自己的权限
|
||||||
|
Long userId = LoginContext.me().getLoginUser().getUserId();
|
||||||
|
List<Long> userRoleIdList = sysUserRoleServiceApi.getUserRoleIdList(userId);
|
||||||
|
if (userRoleIdList.contains(roleId) && menuOptionId.equals(AssertAssignUtil.DISABLED_MENU_OPTIONS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LambdaUpdateWrapper<SysRoleMenuOptions> wrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<SysRoleMenuOptions> wrapper = new LambdaUpdateWrapper<>();
|
||||||
wrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
wrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
||||||
wrapper.eq(SysRoleMenuOptions::getMenuOptionId, menuOptionId);
|
wrapper.eq(SysRoleMenuOptions::getMenuOptionId, menuOptionId);
|
||||||
|
|
|
@ -15,6 +15,7 @@ import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissio
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.util.AssertAssignUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -64,6 +65,7 @@ public class RoleBindTotalImpl implements RoleAssignOperateAction, RoleBindLimit
|
||||||
|
|
||||||
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
sysRoleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
sysRoleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
|
||||||
|
AssertAssignUtil.assertAssign(roleId, sysRoleMenuOptionsLambdaQueryWrapper);
|
||||||
this.sysRoleMenuOptionsService.remove(sysRoleMenuOptionsLambdaQueryWrapper);
|
this.sysRoleMenuOptionsService.remove(sysRoleMenuOptionsLambdaQueryWrapper);
|
||||||
|
|
||||||
// 如果是选中状态,则从新绑定所有的选项
|
// 如果是选中状态,则从新绑定所有的选项
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenuOptions;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断当前用户的所有角色,是否包含了被操作的角色,并且被操作角色的菜单功能id包含了禁用修改权限的菜单功能id
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/9/8 23:31
|
||||||
|
*/
|
||||||
|
public class AssertAssignUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改权限的操作id
|
||||||
|
*/
|
||||||
|
public static final Long DISABLED_MENU_OPTIONS = 1677229379281846273L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行判断过程,并增加筛选条件
|
||||||
|
*
|
||||||
|
* @param roleId 被操作的角色id
|
||||||
|
* @param wrapper 拼接条件
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/9/8 23:34
|
||||||
|
*/
|
||||||
|
public static void assertAssign(Long roleId, LambdaQueryWrapper<SysRoleMenuOptions> wrapper) {
|
||||||
|
|
||||||
|
// 获取当前登录用户的所有角色列表
|
||||||
|
SysUserRoleServiceApi sysUserRoleServiceApi = SpringUtil.getBean(SysUserRoleServiceApi.class);
|
||||||
|
List<Long> userRoleIdList = sysUserRoleServiceApi.getUserRoleIdList(LoginContext.me().getLoginUser().getUserId());
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(userRoleIdList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userRoleIdList.contains(roleId)) {
|
||||||
|
wrapper.notIn(SysRoleMenuOptions::getMenuOptionId, DISABLED_MENU_OPTIONS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue