本文中建立在认证流程的基础上,所以建议读者先看看认证文章
认证流程
demo首先来看表设计
大体流程该如图所示,写好doGetAuthorizationInfo也就好了
doGetAuthorizationInfo代码
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String username = JWTUtil.getUsername(principals.toString());
AuthUser user =
authUserService.getOne(new QueryWrapper().lambda().eq(AuthUser::getName, username));
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
simpleAuthorizationInfo.addRoles(authUserService.findUserRoles(user.getId()));
Set permission = new HashSet<>(authUserService.findPermissions(user.getId()));
simpleAuthorizationInfo.addStringPermissions(permission);
return simpleAuthorizationInfo;
}
authUserService
@Service public class AuthUserServiceImpl extends ServiceImplimplements IAuthUserService { @Autowired private AuthUserMapper authUserMapper; @Override public List findUserRoles(Long id) { List roles = authUserMapper.findUserRoles(id); return roles.stream().map(AuthRole::getName).collect(Collectors.toList()); } @Override public List findPermissions(Long id) { List permissions = authUserMapper.findPermissions(id); List allPerms = new ArrayList<>(); permissions.stream() .filter(e-> Objects.nonNull(e.getPerms())) .map(AuthPermission::getPerms) .collect(Collectors.toList()) .forEach( e->{ allPerms.addAll(Arrays.asList(e.split(","))); } ); return allPerms; } }
mapper
SELECT c.* FROM auth_user a INNER JOIN auth_user_role_relation b ON a.id = b.user_id INNER JOIN auth_role c ON b.role_id = c.id and a.id = #{id}
做个测试:
结果返回了
demo地址



