rbac权限管理方面的一些问题

发布于 2022-09-12 23:35:15 字数 1016 浏览 21 评论 0

<input type="text">
先说一下我的鉴权思路:
1、项目启动时缓存资源-角色关系到redis中

2、前台请求到网关后统一鉴权,鉴权方式为从redis缓存中读取 资源-角色关系 ,然后使用spring提供的路径匹配器AntPathMatcher进行匹配,查找出该url所需的角色集合
3、最后与用户所拥有的角色进行对比,如果拥有其中任一角色即可正常访问

现在说一下我的问题
比如说我现在有一个用户,他拥有的角色是只有test,而test可以访问的资源如上图,可以看到只有
/system/user/**(/system是目录,不是具体的路由)。

这样的话看起来没什么毛病,该用户就拥有了访问user(对应用户管理)的权限。可是问题来了,我的用户管理页面的api不只包括user/**下的,因为 要对角色授权,此时我还应该访问/system/role/**下的findAll来查询所有的角色,以便对用户进行授权。而这个路径所需的角色可以看到是test所不具有的。所以这就出现问题了

关于这个问题怎么解决呢?目前我想到的办法是在userController新增查询所有角色的接口,调用roleService的相关方法。这样就正常访问,但是这样做的话感觉不是很好,会变得很凌乱,用户模块参杂了本来不属于自己的其他业务·······
另外我的前端菜单是动态生成的,还是根据用户拥有的角色,以及对应角色所拥有的权限。我刚开始对于/system的处理是这样写的/system/**,这样没了上述问题,但是更不可取,因为这样就直接赋予用户/system下的所有权限。虽然用户看不到相应的页面但是如果知道api的话还是可以访问的,不经后端的数据验证是没有什么安全性可言的。

不知道对此各位有什么好的解决办法,或者有其他已经经过验证的权限管理方案,可以交流交流。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北方的巷 2022-09-19 23:35:15

为什么不放到公共类,或者中间件来进行判断呢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文