【auth】【system】增加角色关联button功能,增加校验当前用户有无button的权限方法

pull/3/head
fengshuonan 2021-01-09 11:53:58 +08:00
parent 26a79e6c21
commit 2bc5e18fe8
12 changed files with 169 additions and 11 deletions

View File

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

View File

@ -68,6 +68,11 @@ public class LoginUser implements Serializable {
*/
private Set<String> resourceUrls;
/**
*
*/
private Set<String> buttonCodes;
/**
* DictMap
*/

View File

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

View File

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

View File

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

View File

@ -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> {
}

View File

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

View File

@ -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> {
}

View File

@ -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 {
}

View File

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

View File

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

View File

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