mirror of https://gitee.com/stylefeng/roses
【auth】【system】增加角色关联button功能,增加校验当前用户有无button的权限方法
parent
26a79e6c21
commit
2bc5e18fe8
|
@ -63,4 +63,14 @@ public interface LoginUserApi {
|
|||
*/
|
||||
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> buttonCodes;
|
||||
|
||||
/**
|
||||
* 其他信息,Dict为Map的拓展
|
||||
*/
|
||||
|
|
|
@ -121,4 +121,14 @@ public class LoginUserImpl implements LoginUserApi {
|
|||
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);
|
||||
|
||||
/**
|
||||
* 获取角色对应的按钮编码集合
|
||||
*
|
||||
* @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.PageResultFactory;
|
||||
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.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.entity.*;
|
||||
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.SysRoleMenuService;
|
||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleResourceService;
|
||||
import cn.stylefeng.roses.kernel.role.modular.service.SysRoleService;
|
||||
import cn.stylefeng.roses.kernel.role.modular.service.*;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
|
@ -92,6 +86,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
@Resource
|
||||
private SysRoleMenuService roleMenuService;
|
||||
|
||||
@Resource
|
||||
private SysRoleMenuButtonService sysRoleMenuButtonService;
|
||||
|
||||
@Override
|
||||
public void add(SysRoleRequest sysRoleRequest) {
|
||||
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());
|
||||
}
|
||||
|
||||
@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 userOrgInfo 组织机构信息
|
||||
* @param resourceUrlsListByCodes 用户的所有资源url
|
||||
* @param roleButtonCodes
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/26 17:53
|
||||
*/
|
||||
|
@ -41,7 +42,8 @@ public class UserLoginInfoFactory {
|
|||
List<SysRoleResponse> roleResponseList,
|
||||
DataScopeResponse dataScopeResponse,
|
||||
SysUserOrgResponse userOrgInfo,
|
||||
Set<String> resourceUrlsListByCodes) {
|
||||
Set<String> resourceUrlsListByCodes,
|
||||
Set<String> roleButtonCodes) {
|
||||
|
||||
UserLoginInfoDTO userLoginInfoDTO = new UserLoginInfoDTO();
|
||||
|
||||
|
@ -97,6 +99,9 @@ public class UserLoginInfoFactory {
|
|||
}
|
||||
}
|
||||
|
||||
// 填充用户拥有的按钮编码
|
||||
loginUser.setButtonCodes(roleButtonCodes);
|
||||
|
||||
// 响应dto
|
||||
userLoginInfoDTO.setLoginUser(loginUser);
|
||||
return userLoginInfoDTO;
|
||||
|
|
|
@ -412,8 +412,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
List<String> resourceCodeList = roleServiceApi.getRoleResourceCodeList(roleIds);
|
||||
Set<String> resourceUrlsListByCodes = resourceServiceApi.getResourceUrlsListByCodes(resourceCodeList);
|
||||
|
||||
// 5. 组装响应结果
|
||||
return UserLoginInfoFactory.userLoginInfoDTO(sysUser, roleResponseList, dataScopeResponse, userOrgInfo, resourceUrlsListByCodes);
|
||||
// 6. 获取用户的所有按钮code集合
|
||||
Set<String> roleButtonCodes = roleServiceApi.getRoleButtonCodes(roleIds);
|
||||
|
||||
// 7. 组装响应结果
|
||||
return UserLoginInfoFactory.userLoginInfoDTO(sysUser, roleResponseList, dataScopeResponse, userOrgInfo, resourceUrlsListByCodes, roleButtonCodes);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
|
Loading…
Reference in New Issue