做内部管理系统时, 两种实现:
TEMPLATE 渲染 使用模板语言去渲染
ajax 前后分离 后端向前端提供 RESTFUL 接口
之前使用的是 TEMPLATE 渲染, 这样做前后耦合比较高,前后端代码在一个 project 里。
现在打算前后分离,后端只提供接口。 但有一个问题, 操作权限验证怎么做?
后端可以根据登录 session 判断用户是否有权限并报错, 但是我想实现: 前端根据登录用户的身份,在页面中隐藏一些功能
目前的想法是:
前端加载每个页面时,发送获取资源数据接口时, 再发送 GET /user/permission 接口, 获取当前登录用户拥有的权限 list , 根据返回展示或隐藏相应功能.
是否有更好办法?
1
chairuosen 2016-07-29 11:27:02 +08:00
OAuth 那一套,登录取 token ,拿 token 取 user 对象,里面可以有一些级别啊,权限之类的属性。
|
2
xiewenlongs OP 我是说接口设计上,是不是每个页面除了加载数据接口外,还要发一个获取用户权限请求
|
3
hxsf 2016-07-29 12:26:05 +08:00
OAuth 拿到 token 后,
后续请求 全部把 token 放 header 或者参数里传回服务器,后端根据 token 判断权限后返回数据。 前端拿到所有数据后做筛选就是掩耳盗铃啊。。。 |
4
kookxiang 2016-07-29 12:57:57 +08:00
后端可以输出到 window 里啊,然后前端不就能拿到咯
<script> window.isAdmin = true; window.userId = 123; </script> |
5
learnshare 2016-07-29 13:11:27 +08:00
要做前后端分离,一定要分干净,后端只有 API 就可以了。
至于认证登录,琢磨一套安全性还可以,实现不太复杂的就好了。 登录之后获得 token ,然后每个请求都带 token 比较方便。 |
6
loading 2016-07-29 13:18:00 +08:00 via Android
无论前台如何,后端也要进行验证, nodejs 简便的地方就体现了。
服务端绝对不能偷懒! |
7
ck65 2016-07-29 13:42:02 +08:00
如果 Java/NodeJS/PHP... 作后端, iOS/Android App 作前端(客户端),用于视图展示的权限判定结果,肯定不能带到接口内部去的,接口依然要独自对数据进行权限和有效性判定。
那么 Java/NodeJS/PHP... 作后端, Web App 作前端(客户端),模式一样。 |
8
xiewenlongs OP 前端想根据登录用户的身份,隐藏掉部分功能(隐藏功能的 API 肯定后端也做权限验证)。 是不是可以在用户登录时,把用户身份放在 cookie 里, 之后每次渲染页面,根据 cookie 显示或隐藏部分功能 (这样前端更好看一些, 把没有权限的功能隐藏,即使被 hack 后端接口也有验证),
这样是不是好点 |
9
zhouquanbest 2016-07-29 14:05:39 +08:00
我之前写 admin 总结出来的最好方案是
前端 AngularJS+Bootstrap 后端 Tornado 纯 RESTful 每个请求当然都是有权限判断的 Tornado 实现这个真是 easy Angular 这种双向绑定的用来写 admin 页面实在是太爽 基本都是数据展示 页面模块化处理也舒服 |
10
mcfog 2016-07-29 14:31:59 +08:00
我就奇怪为啥一旦有人问前后端分离中的鉴权问题就有人回答 OAuth ……
|