在平常使用Sa-token中可能会出现管理员和普通用户,管理员能用的接口,普通用户不能用这种场景,就需要用到我们的角色权限认证,这样可以更快捷的区分不同的用户角色
所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限:
- 有,就让你通过。
- 没有?那么禁止访问
官网上是这样说明这种情况的
这里直接提供代码
@SaCheckRole(value = {"管理员","超级管理员"},mode = SaMode.OR)
@ApiOperation(value = "只有管理员身份才能进入")
@PostMapping("/rules")
public Result rules() {
return Result.success(attendanceService.rules());
}
我们这个只需要在@Controller层声明这个就可以校验,不过在之前,我们需要实现一个接口
@Component
public class StpInterfaceImpl implements StpInterface {
@Resource
private RoleService roleService;
//添加某些权限可以访问的
@Override
public List<String> getPermissionList(Object o, String s) {
return null;
}
//添加某些角色可以访问的
@Override
public List<String> getRoleList(Object o, String s) {
MPJLambdaWrapper<Role> wrapper = new MPJLambdaWrapper<>();
wrapper.select(Role::getId)
Role one = roleService.getOne(wrapper);
List<String> list = new ArrayList<>();
list.add(one.getId());
return list;
}
}
配置这个类实现StpInterface接口就可以使用了,这里需要说明下,我们是添加角色的,所以在重写的接口中,我们访问数据库,每次进来的是什么人进来,这里就需要和数据库进行交互,然后再和@SaCheckRole进行搭配,就可以在每次获取用户是什么角色的时候,判断在这个注解的value中没有就可以进行拦截了