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

做管理后台时,前后端分离的问题

  •  
  •   xiewenlongs · 2016-07-29 11:20:44 +08:00 · 9845 次点击
    这是一个创建于 2800 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做内部管理系统时, 两种实现:

    • TEMPLATE 渲染 使用模板语言去渲染

    • ajax 前后分离 后端向前端提供 RESTFUL 接口

    之前使用的是 TEMPLATE 渲染, 这样做前后耦合比较高,前后端代码在一个 project 里。

    现在打算前后分离,后端只提供接口。 但有一个问题, 操作权限验证怎么做?

    后端可以根据登录 session 判断用户是否有权限并报错, 但是我想实现: 前端根据登录用户的身份,在页面中隐藏一些功能

    目前的想法是

    前端加载每个页面时,发送获取资源数据接口时, 再发送 GET /user/permission 接口, 获取当前登录用户拥有的权限 list , 根据返回展示或隐藏相应功能.

    是否有更好办法?

    10 条回复    2016-07-29 14:31:59 +08:00
    chairuosen
        1
    chairuosen  
       2016-07-29 11:27:02 +08:00
    OAuth 那一套,登录取 token ,拿 token 取 user 对象,里面可以有一些级别啊,权限之类的属性。
    xiewenlongs
        2
    xiewenlongs  
    OP
       2016-07-29 11:59:25 +08:00
    我是说接口设计上,是不是每个页面除了加载数据接口外,还要发一个获取用户权限请求
    hxsf
        3
    hxsf  
       2016-07-29 12:26:05 +08:00
    OAuth 拿到 token 后,
    后续请求 全部把 token 放 header 或者参数里传回服务器,后端根据 token 判断权限后返回数据。

    前端拿到所有数据后做筛选就是掩耳盗铃啊。。。
    kookxiang
        4
    kookxiang  
       2016-07-29 12:57:57 +08:00
    后端可以输出到 window 里啊,然后前端不就能拿到咯
    <script>
    window.isAdmin = true;
    window.userId = 123;
    </script>
    learnshare
        5
    learnshare  
       2016-07-29 13:11:27 +08:00
    要做前后端分离,一定要分干净,后端只有 API 就可以了。

    至于认证登录,琢磨一套安全性还可以,实现不太复杂的就好了。

    登录之后获得 token ,然后每个请求都带 token 比较方便。
    loading
        6
    loading  
       2016-07-29 13:18:00 +08:00 via Android
    无论前台如何,后端也要进行验证, nodejs 简便的地方就体现了。

    服务端绝对不能偷懒!
    ck65
        7
    ck65  
       2016-07-29 13:42:02 +08:00
    如果 Java/NodeJS/PHP... 作后端, iOS/Android App 作前端(客户端),用于视图展示的权限判定结果,肯定不能带到接口内部去的,接口依然要独自对数据进行权限和有效性判定。
    那么 Java/NodeJS/PHP... 作后端, Web App 作前端(客户端),模式一样。
    xiewenlongs
        8
    xiewenlongs  
    OP
       2016-07-29 13:58:29 +08:00
    前端想根据登录用户的身份,隐藏掉部分功能(隐藏功能的 API 肯定后端也做权限验证)。 是不是可以在用户登录时,把用户身份放在 cookie 里, 之后每次渲染页面,根据 cookie 显示或隐藏部分功能 (这样前端更好看一些, 把没有权限的功能隐藏,即使被 hack 后端接口也有验证),

    这样是不是好点
    zhouquanbest
        9
    zhouquanbest  
       2016-07-29 14:05:39 +08:00
    我之前写 admin 总结出来的最好方案是
    前端 AngularJS+Bootstrap
    后端 Tornado 纯 RESTful

    每个请求当然都是有权限判断的 Tornado 实现这个真是 easy
    Angular 这种双向绑定的用来写 admin 页面实在是太爽 基本都是数据展示
    页面模块化处理也舒服
    mcfog
        10
    mcfog  
       2016-07-29 14:31:59 +08:00
    我就奇怪为啥一旦有人问前后端分离中的鉴权问题就有人回答 OAuth ……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2945 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:11 · PVG 22:11 · LAX 07:11 · JFK 10:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.