mirror of https://gitee.com/stylefeng/roses
【auth】【system】增加角色关联button功能,增加校验当前用户有无button的权限方法
parent
26a79e6c21
commit
2bc5e18fe8
|
@ -63,4 +63,14 @@ public interface LoginUserApi {
|
||||||
*/
|
*/
|
||||||
boolean hasLogin();
|
boolean hasLogin();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否包含某个按钮的权限
|
||||||
|
*
|
||||||
|
* @param buttonCode 按钮的编码
|
||||||
|
* @return true-有权限,false-没有权限
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/1/9 11:32
|
||||||
|
*/
|
||||||
|
boolean haveButton(String buttonCode);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,11 @@ public class LoginUser implements Serializable {
|
||||||
*/
|
*/
|
||||||
private Set<String> resourceUrls;
|
private Set<String> resourceUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户拥有的按钮编码集合
|
||||||
|
*/
|
||||||
|
private Set<String> buttonCodes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 其他信息,Dict为Map的拓展
|
* 其他信息,Dict为Map的拓展
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -121,4 +121,14 @@ public class LoginUserImpl implements LoginUserApi {
|
||||||
return sessionManagerApi.haveSession(token);
|
return sessionManagerApi.haveSession(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean haveButton(String buttonCode) {
|
||||||
|
LoginUser loginUser = getLoginUser();
|
||||||
|
if (loginUser.getButtonCodes() == null) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return loginUser.getButtonCodes().contains(buttonCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,4 +62,14 @@ public interface RoleServiceApi {
|
||||||
*/
|
*/
|
||||||
List<String> getRoleResourceCodeList(List<Long> roleIdList);
|
List<String> getRoleResourceCodeList(List<Long> roleIdList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取角色对应的按钮编码集合
|
||||||
|
*
|
||||||
|
* @param roleIdList 角色id集合
|
||||||
|
* @return 角色拥有的按钮编码集合
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/1/9 11:08
|
||||||
|
*/
|
||||||
|
Set<String> getRoleButtonCodes(List<Long> roleIdList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package cn.stylefeng.roses.kernel.role.modular.entity;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色按钮关联
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/01/09 11:48
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("sys_role_menu_button")
|
||||||
|
public class SysRoleMenuButton extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@TableId("role_button_id")
|
||||||
|
private Long roleButtonId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色id
|
||||||
|
*/
|
||||||
|
@TableField("role_id")
|
||||||
|
private Long roleId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮id
|
||||||
|
*/
|
||||||
|
@TableField("button_id")
|
||||||
|
private Long buttonId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮编码
|
||||||
|
*/
|
||||||
|
@TableField("button_code")
|
||||||
|
private String buttonCode;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package cn.stylefeng.roses.kernel.role.modular.mapper;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleMenuButton;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色按钮关联 Mapper 接口
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/01/09 11:48
|
||||||
|
*/
|
||||||
|
public interface SysRoleMenuButtonMapper extends BaseMapper<SysRoleMenuButton> {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="cn.stylefeng.roses.kernel.role.modular.mapper.SysRoleMenuButtonMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="cn.stylefeng.roses.kernel.role.modular.entity.SysRoleMenuButton">
|
||||||
|
<id column="role_button_id" property="roleButtonId"/>
|
||||||
|
<result column="role_id" property="roleId"/>
|
||||||
|
<result column="button_id" property="buttonId"/>
|
||||||
|
<result column="button_code" property="buttonCode"/>
|
||||||
|
<result column="create_time" property="createTime"/>
|
||||||
|
<result column="create_user" property="createUser"/>
|
||||||
|
<result column="update_time" property="updateTime"/>
|
||||||
|
<result column="update_user" property="updateUser"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
</mapper>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package cn.stylefeng.roses.kernel.role.modular.service;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleMenuButton;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色按钮关联 服务类
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/01/09 11:48
|
||||||
|
*/
|
||||||
|
public interface SysRoleMenuButtonService extends IService<SysRoleMenuButton> {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package cn.stylefeng.roses.kernel.role.modular.service.impl;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleMenuButton;
|
||||||
|
import cn.stylefeng.roses.kernel.role.modular.mapper.SysRoleMenuButtonMapper;
|
||||||
|
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleMenuButtonService;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色按钮关联 服务实现类
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2021/01/09 11:48
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class SysRoleMenuButtonServiceImpl extends ServiceImpl<SysRoleMenuButtonMapper, SysRoleMenuButton> implements SysRoleMenuButtonService {
|
||||||
|
|
||||||
|
}
|
|
@ -35,15 +35,9 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
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.factory.PageResultFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||||
import cn.stylefeng.roses.kernel.role.modular.entity.SysRole;
|
import cn.stylefeng.roses.kernel.role.modular.entity.*;
|
||||||
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleDataScope;
|
|
||||||
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleMenu;
|
|
||||||
import cn.stylefeng.roses.kernel.role.modular.entity.SysRoleResource;
|
|
||||||
import cn.stylefeng.roses.kernel.role.modular.mapper.SysRoleMapper;
|
import cn.stylefeng.roses.kernel.role.modular.mapper.SysRoleMapper;
|
||||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleDataScopeService;
|
import cn.stylefeng.roses.kernel.role.modular.service.*;
|
||||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleMenuService;
|
|
||||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleResourceService;
|
|
||||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleService;
|
|
||||||
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||||
|
@ -92,6 +86,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
@Resource
|
@Resource
|
||||||
private SysRoleMenuService roleMenuService;
|
private SysRoleMenuService roleMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysRoleMenuButtonService sysRoleMenuButtonService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(SysRoleRequest sysRoleRequest) {
|
public void add(SysRoleRequest sysRoleRequest) {
|
||||||
SysRole sysRole = new SysRole();
|
SysRole sysRole = new SysRole();
|
||||||
|
@ -337,6 +334,15 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
return sysRoleResources.stream().map(SysRoleResource::getResourceCode).collect(Collectors.toList());
|
return sysRoleResources.stream().map(SysRoleResource::getResourceCode).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getRoleButtonCodes(List<Long> roleIdList) {
|
||||||
|
LambdaQueryWrapper<SysRoleMenuButton> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(SysRoleMenuButton::getRoleId, roleIdList);
|
||||||
|
queryWrapper.select(SysRoleMenuButton::getButtonCode);
|
||||||
|
List<SysRoleMenuButton> list = sysRoleMenuButtonService.list(queryWrapper);
|
||||||
|
return list.stream().map(SysRoleMenuButton::getButtonCode).collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取系统角色
|
* 获取系统角色
|
||||||
*
|
*
|
||||||
|
|
|
@ -34,6 +34,7 @@ public class UserLoginInfoFactory {
|
||||||
* @param dataScopeResponse 数据范围信息
|
* @param dataScopeResponse 数据范围信息
|
||||||
* @param userOrgInfo 组织机构信息
|
* @param userOrgInfo 组织机构信息
|
||||||
* @param resourceUrlsListByCodes 用户的所有资源url
|
* @param resourceUrlsListByCodes 用户的所有资源url
|
||||||
|
* @param roleButtonCodes
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/12/26 17:53
|
* @date 2020/12/26 17:53
|
||||||
*/
|
*/
|
||||||
|
@ -41,7 +42,8 @@ public class UserLoginInfoFactory {
|
||||||
List<SysRoleResponse> roleResponseList,
|
List<SysRoleResponse> roleResponseList,
|
||||||
DataScopeResponse dataScopeResponse,
|
DataScopeResponse dataScopeResponse,
|
||||||
SysUserOrgResponse userOrgInfo,
|
SysUserOrgResponse userOrgInfo,
|
||||||
Set<String> resourceUrlsListByCodes) {
|
Set<String> resourceUrlsListByCodes,
|
||||||
|
Set<String> roleButtonCodes) {
|
||||||
|
|
||||||
UserLoginInfoDTO userLoginInfoDTO = new UserLoginInfoDTO();
|
UserLoginInfoDTO userLoginInfoDTO = new UserLoginInfoDTO();
|
||||||
|
|
||||||
|
@ -97,6 +99,9 @@ public class UserLoginInfoFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 填充用户拥有的按钮编码
|
||||||
|
loginUser.setButtonCodes(roleButtonCodes);
|
||||||
|
|
||||||
// 响应dto
|
// 响应dto
|
||||||
userLoginInfoDTO.setLoginUser(loginUser);
|
userLoginInfoDTO.setLoginUser(loginUser);
|
||||||
return userLoginInfoDTO;
|
return userLoginInfoDTO;
|
||||||
|
|
|
@ -412,8 +412,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||||
List<String> resourceCodeList = roleServiceApi.getRoleResourceCodeList(roleIds);
|
List<String> resourceCodeList = roleServiceApi.getRoleResourceCodeList(roleIds);
|
||||||
Set<String> resourceUrlsListByCodes = resourceServiceApi.getResourceUrlsListByCodes(resourceCodeList);
|
Set<String> resourceUrlsListByCodes = resourceServiceApi.getResourceUrlsListByCodes(resourceCodeList);
|
||||||
|
|
||||||
// 5. 组装响应结果
|
// 6. 获取用户的所有按钮code集合
|
||||||
return UserLoginInfoFactory.userLoginInfoDTO(sysUser, roleResponseList, dataScopeResponse, userOrgInfo, resourceUrlsListByCodes);
|
Set<String> roleButtonCodes = roleServiceApi.getRoleButtonCodes(roleIds);
|
||||||
|
|
||||||
|
// 7. 组装响应结果
|
||||||
|
return UserLoginInfoFactory.userLoginInfoDTO(sysUser, roleResponseList, dataScopeResponse, userOrgInfo, resourceUrlsListByCodes, roleButtonCodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
|
Loading…
Reference in New Issue