我想实现精确到按钮级别的权限,但是不知道权限表应该存储哪些信息?
1.权限表应不应该存储前端路由信息 权限表添加路由信息,然后动态返回给前端,可是感觉如果有按钮级别的权限,是不是后端动态返回路由也没有什么意义呢?(按钮级别的权限前端应该把权限写死然后判断吧)
2.权限表应不应该存储 url 信息 这块想的是启动项目自动加载所有 url 对应的权限信息,而不需要在每个 controller 方法上添加注解
请问大家实际项目中权限都是如何实现的呢?
1
chihiro2014 2020-05-14 00:08:08 +08:00
这类资料蛮多的啊,你好好学下 spring security 然后再看看 jwt 就行
|
2
darrenfang 2020-05-14 00:30:14 +08:00
之前开发的 app 做法是提供 api 查询用户所有的权限,然后在每个按钮上做下判断。
后来开发的一个 app 不需要细化到按钮的权限,就提供了一个 api 查询导航栏。 |
3
woncode 2020-05-14 01:52:03 +08:00 via Android
精确到按钮级别的权限控制,我也一直找不到最称心的实现方式,最流行的 rbac 模型不行,它只能控制到资源级别,也就是 api 级别
我认为这种按钮级别根本不适合使用前后端分离的方案,而是后端完全渲染成 html 后,再直接发给浏览器,所以需要使用前端模板引擎,比如 thymeleaf 如果一定要使用 mvvm 的话,我目前看到 angular 的路由守卫功能还可以,不知道 vue 有没有类似的方案 |
4
evenIfAlsoGo 2020-05-14 08:47:41 +08:00
@woncode vue router 有路由守卫,全局的,路由的,组件的。( https://router.vuejs.org/zh/guide/advanced/navigation-guards.html )
|
5
xuanbg 2020-05-14 09:11:20 +08:00 1
先说前端,虽然是假权限,但也是需要根据用户权限来显示 /隐藏对应的操作按钮,或者更进一步显示 /隐藏相关组件。
后端既然楼主要求动态,那么鉴权就不能通过注解来实现了。你可以通过拦截器或者干脆在网关上面实现鉴权。思路无非就是通过解析 token 来获取用户信息,然后根据用户信息来鉴权。 |
6
yisheyuanzhang 2020-05-14 09:23:15 +08:00
权限表:权限路由(对于菜单)/权限 code(用于按钮), 权限类型(菜单 or 按钮) 上级 id
1 、前端根据后端返回的信息,展示菜单。 抽出权限 code,用于控制按钮的显示和隐藏(前端控制按钮显示隐藏,后端也要校验) 2 、权限表不存 url,Controller 方法上加权限 code 的注解来校验 |
7
90d0n 2020-05-14 09:27:13 +08:00
1. 存路由 存按钮权限.按钮级别的目前没有找到称心的办法. 现在就是再前端埋点写死的按钮权限, 然后调用后端接口返回用户具体的权限列表;
2. 存 url. 做动态权限的话, security 动态加载权限时, 没有 url 怎么匹配具体哪个 url 有什么权限. 另外, security 的动态权限挺难搞, 我目前的方法还得用反射拿到 SecurityMetadataSource 中的 map 才能真正动态修改权限配置(改完不用重启应用的那种). 楼主用的什么方法实现的动态配置能否请教一下 |
8
muyunn OP @darrenfang 嗯嗯,按钮所需要的权限得写死吧
|
11
muyunn OP @yisheyuanzhang 权限表不存 url 的话,后端就无法实现动态更新权限了
|
12
muyunn OP @90d0n 我的思路目前跟你的差不多,secutity 感觉有点重了,我也是刚接触,还没开始实现,等我实现完成再回复你
|
13
mmdsun 2020-05-14 19:23:52 +08:00 via Android
页面是完整的页面。然后 vue 写 if 判断这个按钮是否显示。在登录的时候按钮权限由服务器返回。 我的权限表设计比较乱,没有抽出菜单表。里面是有 URL 的。权限表 resourceType 字段来区分 button 还是 menu 都有。系统菜单也是后台接口返回的。
|
14
darrenfang 2020-05-14 19:24:46 +08:00 via iPhone
@muyunn 按钮上权限是写死的,只是控制隐藏和显示罢了。我的权限表没存 url,我觉得 url 是开发时就确定好的,后期也不需要更改,所以就用静态字段来代替了。
|