对于前后端完全分离的项目,如何在前端处理权限的问题?

2013-06-04 17:54:12 +08:00
 aisensiy
比如,根据登录用户的角色不同,对某个项目的权限是不同的。管理员是可以修改项目的,而普通用户只能查看。

如果前后端不分离的话,我可以在渲染模版的时候就是询问这些问题。

但是,如果是前后端分离的话,模版就是在前端渲染。比如我要判断这个 "update" 的按钮要不要显示要怎么办呢?我现在想到的是给每一个返回的 json 对象有一个单独的字段就是告诉它当前用户对它的权限是怎样的。比如 { can_update: true, can_delete: false } 这样的。

但是,感觉并不是最好的方案。有更好的办法吗。

哦,还有,我考虑的是传 json 格式的,不是后端拼好模板的情况。
28942 次点击
所在节点    程序员
23 条回复
66beta
2013-06-04 18:01:48 +08:00
这个不就是变相处理了么
感觉穿普通拖鞋和人字拖的区别
chemzqm
2013-06-04 18:06:45 +08:00
这种方式前后端耦合度太高了,最好做成单页面应用,登录后前端保存用户信息,组件渲染前JS判断下就行了。
jasya
2013-06-04 18:07:24 +08:00
或者放在sessionStorage里
kk71
2013-06-04 18:23:23 +08:00
为啥要前后分离呢…不过我觉得除了json似乎没有别的更好的办法了。或者可以用iframe?
chemzqm
2013-06-04 18:27:23 +08:00
分离可以减轻后台负担,加快研发,如果前端能做好的话
aisensiy
2013-06-04 18:46:56 +08:00
@kk71 是这样 有使用第三方后台的需求,没有自己的后台的。只能调用人家的东西。
qq286735628
2013-06-04 19:26:17 +08:00
暴力的话,一个class解决

给页面容器最外层放个class,注明该页面权限是administrator还是guest,然后css配合是否显示。太暴力,安全问题多多。

后台给你的数据,应该会包括用户权限信息的,你根据这个来判断加载什么内容呗,这个弄起来有点麻烦就是,但应该这样做。
qq286735628
2013-06-04 19:30:58 +08:00
抱歉,刚才没细看。
你让json里面添加一个这个字段是对的。
如果json返回内容不可控,那你就得让后端另外再配一个接口,供你查询用户权限。
lyric
2013-06-04 19:31:14 +08:00
@aisensiy 没错,就是像你说的那样做的。前端有权限判定逻辑,后端也有权限判定逻辑。
Ricepig
2013-06-04 20:30:51 +08:00
前端处理安全不是为了安全,而是为了用户体验。

这会付出更多劳动,因为后端的代码同样不能少。
aisensiy
2013-06-04 22:10:16 +08:00
哇 谢谢各位,感觉这里是能有建设性意见的地方。
juicy
2013-06-04 22:12:34 +08:00
@Ricepig 不能同意更多
kangjia
2013-06-04 22:44:44 +08:00
接口处理权限即可。
fyhqy
2013-06-04 23:58:18 +08:00
直接后端处理数据啊。js的json输出。这样最好搞。后段做好了。前端要什么没有
Frannk
2013-06-05 00:27:45 +08:00
仅仅在项目比较大的时候:

如果不用amd 可以将代码模块化 在后端控制前端得到的js文件 这样不同权限的得到不同的模块

如果是amd的话 有点复杂 编译两套app

这样客户端得到不同代码 更加安全


小项目就先得到用户组,然后作为参数启动你的app,缺点是慢一点,app不能直接启动需要一次ajax,我一般是这样的
vigoss
2013-06-05 00:56:38 +08:00
我觉得可以用授权来实现。类似auth.就像你做个app用js店总微博之类的接口一样。
FrankFang128
2013-06-05 01:02:57 +08:00
你的方案是对的。简单实用。
不过这个逻辑可以直接放到后台做啊,如果你有使用模板的话。
metaclass
2013-06-05 01:19:11 +08:00
@chemzqm 其实是因为目前硬件限制,如果负载能力足够大,都不需要搞蛋疼的前端MVC了。好比多线程,试想要有一个无限猛的主机,内存无限CPU单线程算什么东西都是瞬间,那根本没啥必要搞多线程或者分布式queue了,啥都单机解决还简单
iamsk
2013-06-05 02:02:26 +08:00
你的方案挺好,相当于前后端完全分离,后端以接口的方式提供给前端数据,后端的校验是必须的,这是安全问题,前端的校验就是用户体验与交互的问题啦
cauliturtle
2013-06-05 02:09:00 +08:00
javascript 好處就是event driven, 所有request, 不能用node好,或是用純前端(backbone)的方法,其實中間寫個authenticate middleware不就解決了?

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

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

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

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

© 2021 V2EX