V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aisensiy
V2EX  ›  程序员

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

  •  
  •   aisensiy ·
    aisensiy · 2013-06-04 17:54:12 +08:00 · 28725 次点击
    这是一个创建于 3972 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如,根据登录用户的角色不同,对某个项目的权限是不同的。管理员是可以修改项目的,而普通用户只能查看。

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

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

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

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

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

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

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

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

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

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


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

    #2 :前端保存用户信息
    #10 : 前端的权限处理本质是提升体验
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2883 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:53 · PVG 11:53 · LAX 20:53 · JFK 23:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.