flask 应该怎么保护后端 api 接口,为接口增加权限机制?

2017-06-06 09:02:24 +08:00
 mzmxcvbn
新学上手,跌跌撞撞做了一个生产信息的展示系统,后端用 flask 提供 json 数据的 api 接口,前端用 ajax 去获取数据,定时更新。不同的生产数据应该要对应权限的人才能看到,现在我已经用 flask-login 做好了基本的用户登录及权限功能,但这只能保护特定页面不被访问到,可是 api 接口都是暴露在外面的,直接就能绕过页面,拿到 json 数据。我想知道怎么才能和 flask-login 一样,将接口保护起来。
7895 次点击
所在节点    Flask
21 条回复
workwonder
2017-06-21 22:36:03 +08:00
为应对简单的场景并保持一定灵活性,我这样搞:

```
@app.route('/api/a')
@user_passes_test(lambda u: u.group == 'Role-A')
def view_a() :
pass
```

首先要自己实现 user_passes_test 装饰器,lambda 就是一段检测用户是否有权访问的代码。我举的这个例子还体现了根据用户所属的分组来划分权限的思路。

还可以基于此搞一些常用封装,比如:

login_required = user_passes_test(lambda u: u.is_authenticated == True)

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

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

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

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

© 2021 V2EX