前后端分离项目,你们是怎么控制权限的?

2017-12-22 10:31:19 +08:00
 bobiscool

已经做前后端分离 快一年了 技术栈趋向成熟

做出来的是单页面应用,但是在权限上一直都有问题。 现在我做权限 是 后台有一套,前端又有重复的一套,麻烦就在这里,


这里 我现在的解决方案是

但是我觉得自己的办法太笨拙,而且还是会被篡改,所以求各位解答疑惑,谢谢了。

32534 次点击
所在节点    程序员
44 条回复
skyadmin
2017-12-22 11:17:16 +08:00
我觉得 18 楼说得对,你只要保证正常用户体验正常就行,没必要考虑会绕过路由进去的人,那波人就放他们在前端倒腾呗。
zachguo
2017-12-22 11:50:12 +08:00
权限( role, permission )放在后端返回的 JWT token 里前端就能提取到了,前端再写一个 access control 的 HOC (我们用的 react )。
zachguo
2017-12-22 11:57:37 +08:00
可以把用户权限管理完全独立成一个服务,前后端都需要验证 token,这样前后端重写、拆分都比较方便。
des
2017-12-22 12:37:08 +08:00
你要觉得用户手工可以绕过的话,你可以路由部分后台生成完了传给你,权限敏感部分动态加载
xsown
2017-12-22 12:44:41 +08:00
所有涉及到安全的都必须服务端鉴权,在 API 接口上做
RogerHzb
2017-12-22 12:45:49 +08:00
做一个每个用户都能看的页面,所有人进来都跳这个页,轻松加愉快啊
duan602728596
2017-12-22 12:47:56 +08:00
我做的项目都没有后台配合你,只能是前端自己控制模块是否渲染,后端验证什么的都是不存在的
110male
2017-12-22 13:08:26 +08:00
统一调后端的接口。
klren0312
2017-12-22 13:20:19 +08:00
后台把权限菜单发给前台 ,前台渲染菜单,然后请求的时候再判断接口权限
bramblex
2017-12-22 13:20:22 +08:00
用户登录的时候顺便加载权限信息, 然后根据权限组配置一下菜单或者表单就好啊, 这不是基本操作嘛?
ooTwToo
2017-12-22 14:01:43 +08:00
Component beforeCreate 的时候检查权限?
forzalianjunting
2017-12-22 14:09:13 +08:00
建议还是用 vue-router 的 addRoutes 进行动态添加路由,最保险的方式
amibug
2017-12-22 17:02:36 +08:00
前端通常会设计到大量的权限控制问题,按照细粒度归归类大致可以分类以下三类
页面权限、模块权限-页面区块(组件)是否显示、元件权限-组件内元素是否显示
对于传统的多页应用,页面权限控制不需要前端关心,后端路由做一层控制。在 SPA 架构的前端应用中,我们的思路是将所有的前端路由配置在后端,对于不同角色的用户,后端把路由列表吐给前端做路由注册。

推荐看一下“前端权限控制方案” https://segmentfault.com/a/1190000011930560?_ea=3042426
AJian
2017-12-22 17:08:21 +08:00
1. 后台接口加一层 api gateway 做权限控制,防止越权调用
2. 请求后台接口获取当前登录用户所有的 [可用菜单(路由)] 及 [权限信息(权限 key )]
3. 根据 [可用菜单] 动态生成 router
4. 页面子控件,如按钮(对应权限 key )通过 v-if 实现显示与隐藏, 如
<button @click="action" v-if="hasPermission('user.create')">新增用户</Button>
hasPermission 做成一个 mixin 混入所有组件
zhx1991
2017-12-22 17:21:20 +08:00
前端组件加载拉权限, 可以把没权限的模块都给不展示了

后端拉各种数据和接口同样要拉权限
memorycancel
2017-12-22 20:06:51 +08:00
不推翻重写留着过年???
yingfengi
2017-12-22 20:11:42 +08:00
前后端双验证
lc4t
2017-12-22 20:42:10 +08:00
RESTfulAPI 鉴权啊.. 不过有点时候出现一个问题,就是前端打包之后暴露了管理员用到的接口.

后端 Nginx 上也可以设置一些白名单保证某些后台只允许 IP 访问..
PanJiaChen
2017-12-22 22:49:08 +08:00
我一直觉得前端和后端两个做权限的意义和目的是不同的。
之前特意写过一篇文章,推荐可以起看看
https://segmentfault.com/a/1190000009506097
abcbuzhiming
2017-12-22 23:57:35 +08:00
权限验证的目的是防止不怀好意的用户对系统进行渗透,修改不该它修改的数据,而前端的验证本质是做用户引导,代码都在别人前端那里,别人硬要通过修改达到绕过你的目的,你是防不住的,前端的验证仅仅是保证正常操作下用户看不到不该它看见的页面就行了,非正常用户跳过了你的限制,进入到不该进入的页面,这个页面还不是要从后端拉数据,后端的权限验证仍然能拦住它的。

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

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

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

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

© 2021 V2EX