平台后台员工权限管理你们一般是怎么实现的?

2018-09-22 11:17:16 +08:00
 zjsxwc
我现在是用“角色”对每一个 GET、POST “接口”组合管理,然后给员工分配角色,每次请求时判断该员工角色下是否有对这个当前访问接口的权限。


但感觉没必要这么麻烦,我想只要对每个角色定制自己的控制台页面数据(比如可以直接提供静态 html 用于展示,以及对应允许的接口权限列表 yml ),通过 session 保存当前控制台页面数据,然后只有从该控制台页面发出来的请求才算合法就行,也就是从原先“对每个角色分配接口” 变成 “对每个角色定制控制台页面”。
3180 次点击
所在节点    程序员
11 条回复
fxxkgw
2018-09-22 11:24:39 +08:00
把接口 uri 提取存到一个表,然后把每个 uri 和用户关联起来,这个叫授权。
请求时候通过中间件拦截用户请求,通过 session 拿到用户名,判断用户和 uri 是否在数据库里有关联,有则放行,无则返回权限不够。
fxxkgw
2018-09-22 11:27:31 +08:00
上面有误,应该是把 uri 和组或者角色关联,用户放在组或角色表里。
iwtbauh
2018-09-22 11:35:17 +08:00
我直接映射到 Unix 系统用户和数据库用户上,完全不用自己操心
mmdsun
2018-09-22 11:37:17 +08:00
前后端分类? html 的显示的按钮菜单都是登录后返回的权限 code 显示的。接口用注解+拦截器控制接口访问。或者用 shiro,spring security 框架。
aristotll
2018-09-22 11:45:59 +08:00
spring security role
UIXX
2018-09-22 11:46:06 +08:00
你说得没错,你前面叙述的情况是把“可视”不当作基本权限处理。后面的是把“可视”跟“可读”、“可编辑”等权限结合使用。后者更好。
xuanbg
2018-09-22 13:02:17 +08:00
服务端缓存一个和用户 Token 对应的数据结构,这个数据里面包含用户登录时得到的权限(一堆的 url)。在用户访问接口的时候,通过网关去判断当前用户访问的 url 在不在缓存的 url 列表里面,有就放行,没有返回未授权。
honeycomb
2018-09-23 09:55:58 +08:00
spring security/shiro
ebingtel
2018-09-23 13:00:14 +08:00
数据权限和接口权限分开……数据库里面不要存 url,应该存 url 对应的 endpoint
zjsxwc
2018-09-23 14:10:51 +08:00
@ebingtel

不是很理解,能稍微解释下吗?
DavidNineRoc
2018-09-25 15:22:04 +08:00
memus
id name parent_id
1 客服控制台页面
2 工单管理 1
3 客户管理 1

users(单角色,多角色也差不多)
id name role_id
1 david 1
2 gps 2

roles
id name
1 admin
2 guest

permissions
id url method action menu_id
1 /customers get R 3
2 /customers post C 3
3 /customers patch U 3
4 /orders post R 2

role_permission
role_id permission_id
1 1
1 2
1 3

// 实际菜单根据用户拥有的 menus 渲染。当用户点击菜单才渲染权限
// 如果点了客户管理前端会传 menu_id = 3
这时候得到 permission=1,2,3 这三条记录,就知道这个页面有这三个权限,然后通过当前登录用户,角色,权限关联。
这时候如果是 david 用户在 /customers 页面就有 CUR 权限
而 gps 用户在 /customers 页面没有任何权限,这都只是给前端显示的

// 而后端需要再建一个中间件验证权限,用户请求,根据页面的 url 和 method 得到唯一的 permission, 如果为 null,代表当前 url 不用验证权限,如果有记录,判断用户是否有这个权限,没有抛出异常,有,请求就通过

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/491729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX