sa-token有权限通配符,
"*":代表拥有所有的权限;
"*:*:*":表示匹配两个冒号间隔三段字符串的权限格式。
权限内容如下:
1.错误的使用:
因为通配符 "*:*:*" 与数据库中的权限名称无法匹配,所以就需要验证了,比如
@SaCheckPermission("GetUsersAsDataSet")。
2.正确做法如下:
perms.add("*");
package org.sharetek.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.sharetek.common.core.constant.UserConstants;
import org.sharetek.common.core.utils.MapstructUtils;
import org.sharetek.common.core.utils.StreamUtils;
import org.sharetek.common.core.utils.StringUtils;
import org.sharetek.common.core.utils.TreeBuildUtils;
import org.sharetek.common.satoken.utils.LoginHelper;
import org.sharetek.system.domain.SysMenu;
import org.sharetek.system.domain.SysRole;
import org.sharetek.system.domain.SysRoleMenu;
import org.sharetek.system.domain.SysTenantPackage;
import org.sharetek.system.domain.bo.SysMenuBo;
import org.sharetek.system.domain.vo.MetaVo;
import org.sharetek.system.domain.vo.RouterVo;
import org.sharetek.system.domain.vo.SysMenuVo;
import org.sharetek.system.mapper.*;
import org.sharetek.system.service.ISecurityWebApiService;
import org.sharetek.system.service.ISysMenuService;
import org.springframework.stereotype.Service;
import java.util.*;
import static org.sharetek.common.core.constant.UserConstants.SUPER_ADMIN_ROLE_NAME;
/**
* @Description: WebApi 业务层(实现)
* @Param:
* @Return:
* @Author: tjm
* @Date: 2024/2/5 18:01
*/
@RequiredArgsConstructor
@Service
public class SecurityWebApiServiceImpl implements ISecurityWebApiService {
private final SecurityWebApiMapper securityWebApiMapper;
private final SecurityRoleMapper securityRoleMapper;
/**
* @param userName
* @Description: 根据用户名查询权限
* @Param: [userName]
* @Return: java.util.List<java.lang.String>
* @Author: tianjunmou
* @Date: 2024/2/6 10:20
*/
@Override
public Set<String> selectPermsByUserName(String userName) {
Set<String> perms = new HashSet<>();
List<String> roles = securityRoleMapper.selectRolesByUserName(userName);
// 管理员角色"Administrators"拥有所有权限
if (roles.contains(SUPER_ADMIN_ROLE_NAME)) {
perms.add("*");
} else {
perms.addAll(securityWebApiMapper.selectPermsByUserName(userName));
}
return perms;
}
}
"*"匹配所有的权限内容格式,既然匹配上了,就拥有了权限,所以验证通过。