• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aisensiy
V2EX  ›  程序员

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

  •  
  •   aisensiy ·
    aisensiy · Jun 4, 2013 · 30265 views
    This topic created in 4909 days ago, the information mentioned may be changed or developed.
    比如,根据登录用户的角色不同,对某个项目的权限是不同的。管理员是可以修改项目的,而普通用户只能查看。

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

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

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

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

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

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

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

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

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

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


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

    #2 :前端保存用户信息
    #10 : 前端的权限处理本质是提升体验
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4402 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    ♥ Do have faith in what you're doing.