mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】删除、禁用、修改角色判断不能修改超级管理员
parent
1705105269
commit
c9a43ff7b0
|
@ -48,9 +48,9 @@ public interface SysConstants {
|
|||
String DEFAULT_LOGIN_PASSWORD = "Aa123456!";
|
||||
|
||||
/**
|
||||
* 超级管理员的角色编码
|
||||
* 后台管理员的角色编码
|
||||
*/
|
||||
String SUPER_ADMIN_ROLE_CODE = "superAdmin";
|
||||
String BACKEND_ADMIN_ROLE_CODE = "backendAdmin";
|
||||
|
||||
/**
|
||||
* 默认用户的初始角色编码
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.user.biz;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户相关的综合业务
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/11 21:44
|
||||
*/
|
||||
@Service
|
||||
public class UserIntegrationService implements SysUserServiceApi {
|
||||
|
||||
@Resource
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Resource
|
||||
private FileInfoApi fileInfoApi;
|
||||
|
||||
@Override
|
||||
public SimpleUserDTO getUserInfoByUserId(Long userId) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar);
|
||||
SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper);
|
||||
if (sysUser == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
SimpleUserDTO simpleUserDTO = new SimpleUserDTO();
|
||||
simpleUserDTO.setUserId(userId);
|
||||
simpleUserDTO.setRealName(sysUser.getRealName());
|
||||
|
||||
// 获取头像文件id信息,转化为头像URL
|
||||
Long avatarFileId = sysUser.getAvatar();
|
||||
if (avatarFileId == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 获取头像的访问地址
|
||||
String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId);
|
||||
simpleUserDTO.setAvatarUrl(fileAuthUrl);
|
||||
|
||||
return simpleUserDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserRealName(Long userId) {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getRealName);
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper);
|
||||
if (sysUser == null) {
|
||||
return "";
|
||||
}
|
||||
return sysUser.getRealName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserValidateDTO getUserLoginValidateDTO(String account) {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId);
|
||||
SysUser sysUserServiceOne = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false);
|
||||
|
||||
if (sysUserServiceOne == null) {
|
||||
throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST);
|
||||
}
|
||||
|
||||
return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(),
|
||||
sysUserServiceOne.getStatusFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserLoginInfo(Long userId, String ip) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LambdaUpdateWrapper<SysUser> sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date());
|
||||
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip);
|
||||
this.sysUserService.update(sysUserLambdaUpdateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUserSuperAdminFlag(Long userId) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag);
|
||||
SysUser result = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false);
|
||||
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> queryAllUserIdList() {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getUserId);
|
||||
List<SysUser> list = this.sysUserService.list(sysUserLambdaQueryWrapper);
|
||||
return list.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean userExist(Long userId) {
|
||||
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SysUser::getUserId, userId);
|
||||
long count = this.sysUserService.count(wrapper);
|
||||
return count > 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -38,7 +38,17 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum {
|
|||
/**
|
||||
* 新密码与原密码相同
|
||||
*/
|
||||
USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码");
|
||||
USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码"),
|
||||
|
||||
/**
|
||||
* 不能修改超级管理员状态
|
||||
*/
|
||||
CANT_UPDATE_STATUS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10006", "不能修改超级管理员状态"),
|
||||
|
||||
/**
|
||||
* 不能修改超级管理员的角色
|
||||
*/
|
||||
CANT_CHANGE_ADMIN_ROLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10007", "不能修改超级管理员的角色");
|
||||
|
||||
/**
|
||||
* 错误编码
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.user.service;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.response.PersonalInfo;
|
||||
|
@ -14,7 +15,7 @@ import java.util.List;
|
|||
* @author fengshuonan
|
||||
* @date 2023/06/10 21:26
|
||||
*/
|
||||
public interface SysUserService extends IService<SysUser> {
|
||||
public interface SysUserService extends IService<SysUser>, SysUserServiceApi {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
|
|
|
@ -10,10 +10,12 @@ 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;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserRoleExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRoleRequest;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserRoleService;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
@ -39,6 +41,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
|||
@Resource
|
||||
private SysRoleServiceApi sysRoleServiceApi;
|
||||
|
||||
@Resource
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Override
|
||||
public void add(SysUserRoleRequest sysUserRoleRequest) {
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
|
@ -75,6 +80,12 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
|||
@Transactional(rollbackFor = Exception.class)
|
||||
public void bindRoles(SysUserRoleRequest sysUserRoleRequest) {
|
||||
|
||||
// 不能修改超级管理员用户的角色
|
||||
boolean userSuperAdminFlag = sysUserService.getUserSuperAdminFlag(sysUserRoleRequest.getUserId());
|
||||
if (userSuperAdminFlag) {
|
||||
throw new ServiceException(SysUserExceptionEnum.CANT_CHANGE_ADMIN_ROLE);
|
||||
}
|
||||
|
||||
// 清空已有的用户角色绑定
|
||||
LambdaQueryWrapper<SysUserRole> wrapper = this.createWrapper(sysUserRoleRequest);
|
||||
this.remove(wrapper);
|
||||
|
|
|
@ -12,6 +12,7 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
|||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
|
||||
import cn.stylefeng.roses.kernel.file.api.constants.FileConstants;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
|
@ -19,7 +20,9 @@ import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
|
|||
import cn.stylefeng.roses.kernel.sys.api.enums.user.UserStatusEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.api.exception.enums.UserExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.api.expander.SysConfigExpander;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.user.factory.SysUserCreateFactory;
|
||||
|
@ -37,9 +40,11 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 系统用户业务实现层
|
||||
|
@ -59,6 +64,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
@Resource
|
||||
private SysUserRoleService sysUserRoleService;
|
||||
|
||||
@Resource
|
||||
private FileInfoApi fileInfoApi;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void add(SysUserRequest sysUserRequest) {
|
||||
|
@ -180,6 +188,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
@Override
|
||||
public void updateStatus(SysUserRequest sysUserRequest) {
|
||||
|
||||
// 如果是将用户禁用,检测判断不能禁用超级管理员用户
|
||||
boolean userSuperAdminFlag = this.getUserSuperAdminFlag(sysUserRequest.getUserId());
|
||||
if (userSuperAdminFlag) {
|
||||
throw new ServiceException(SysUserExceptionEnum.CANT_UPDATE_STATUS);
|
||||
}
|
||||
|
||||
// 校验状态传值是否正确
|
||||
Integer statusFlag = sysUserRequest.getStatusFlag();
|
||||
UserStatusEnum.validateUserStatus(statusFlag);
|
||||
|
@ -290,6 +304,114 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
this.update(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SimpleUserDTO getUserInfoByUserId(Long userId) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar);
|
||||
SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper);
|
||||
if (sysUser == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
SimpleUserDTO simpleUserDTO = new SimpleUserDTO();
|
||||
simpleUserDTO.setUserId(userId);
|
||||
simpleUserDTO.setRealName(sysUser.getRealName());
|
||||
|
||||
// 获取头像文件id信息,转化为头像URL
|
||||
Long avatarFileId = sysUser.getAvatar();
|
||||
if (avatarFileId == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 获取头像的访问地址
|
||||
String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId);
|
||||
simpleUserDTO.setAvatarUrl(fileAuthUrl);
|
||||
|
||||
return simpleUserDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserRealName(Long userId) {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getRealName);
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper);
|
||||
if (sysUser == null) {
|
||||
return "";
|
||||
}
|
||||
return sysUser.getRealName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserValidateDTO getUserLoginValidateDTO(String account) {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId);
|
||||
SysUser sysUserServiceOne = this.getOne(sysUserLambdaQueryWrapper, false);
|
||||
|
||||
if (sysUserServiceOne == null) {
|
||||
throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST);
|
||||
}
|
||||
|
||||
return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(),
|
||||
sysUserServiceOne.getStatusFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserLoginInfo(Long userId, String ip) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LambdaUpdateWrapper<SysUser> sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date());
|
||||
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip);
|
||||
this.update(sysUserLambdaUpdateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUserSuperAdminFlag(Long userId) {
|
||||
|
||||
if (ObjectUtil.isEmpty(userId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag);
|
||||
SysUser result = this.getOne(sysUserLambdaQueryWrapper, false);
|
||||
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> queryAllUserIdList() {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserLambdaQueryWrapper.select(SysUser::getUserId);
|
||||
List<SysUser> list = this.list(sysUserLambdaQueryWrapper);
|
||||
return list.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean userExist(Long userId) {
|
||||
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SysUser::getUserId, userId);
|
||||
long count = this.count(wrapper);
|
||||
return count > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
|
|
|
@ -65,7 +65,7 @@ public class InitAdminService {
|
|||
private SysRoleMenuOptionsService sysRoleMenuOptionsService;
|
||||
|
||||
/**
|
||||
* 初始化超级管理员,超级管理员拥有最高权限
|
||||
* 初始化后台管理员,后台管理员拥有最高权限
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2020/12/17 21:57
|
||||
|
@ -73,9 +73,9 @@ public class InitAdminService {
|
|||
@Transactional(rollbackFor = Exception.class)
|
||||
public void initSuperAdmin() {
|
||||
|
||||
// 找到超级管理员的角色id
|
||||
// 找到后台管理员角色id
|
||||
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysRole::getRoleCode, SysConstants.SUPER_ADMIN_ROLE_CODE);
|
||||
queryWrapper.eq(SysRole::getRoleCode, SysConstants.BACKEND_ADMIN_ROLE_CODE);
|
||||
queryWrapper.select(SysRole::getRoleId);
|
||||
SysRole superAdminRole = sysRoleService.getOne(queryWrapper);
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class InitAdminService {
|
|||
List<SysMenu> totalMenuList = sysMenuService.getTotalMenuList();
|
||||
List<SysMenuOptions> totalMenuOptionsList = sysMenuOptionsService.getTotalMenuOptionsList();
|
||||
|
||||
// 超级管理员绑定所有的菜单和菜单功能
|
||||
// 后台管理员绑定所有的菜单和菜单功能
|
||||
sysRoleMenuService.bindRoleMenus(superAdminRole.getRoleId(), totalMenuList);
|
||||
sysRoleMenuOptionsService.bindRoleMenuOptions(superAdminRole.getRoleId(), totalMenuOptionsList);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue