对于前后端完全分离的项目,如何在前端处理权限的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
aisensiy
V2EX    程序员

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

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

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

    但是,如果是前后端分离的话,模版就是在前端渲染。比如我要判断这个 "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,我一般是这样的
    leveraging
        16
    leveraging  
       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     Solana     2748 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:18 PVG 08:18 LAX 17:18 JFK 20:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86