Flask 中利用 url_map 进行简单的权限管理的一种思路

2019-06-30 23:15:51 +08:00
 qile1

最近在弄 flask 简单的权限管理,想到一种实现方式:

利用 url_map 把所有的连接路径导出

Map([<Rule '/topics/create' (GET, OPTIONS, HEAD, POST) -> topics.cre
 <Rule '/topics/latest' (GET, OPTIONS, HEAD) -> topics.latest>,
 <Rule '/users/setting' (GET, OPTIONS, HEAD, POST) -> users.setting>
 <Rule '/auth/signout' (GET, OPTIONS, HEAD) -> auth.signout>,
 <Rule '/auth/signin' (GET, OPTIONS, HEAD, POST) -> auth.signin>,
 <Rule '/auth/signup' (GET, OPTIONS, HEAD, POST) -> auth.signup>,
 <Rule '/auth/reset' (GET, OPTIONS, HEAD, POST) -> auth.reset>,
 <Rule '/auth/find' (GET, OPTIONS, HEAD, POST) -> auth.find>,
 <Rule '/topics/' (GET, OPTIONS, HEAD) -> topics.index>,
 <Rule '/' (GET, OPTIONS, HEAD) -> frontend.index>,
 <Rule '/topics/<id>/reply' (OPTIONS, POST) -> topics.reply>,
 <Rule '/topics/<id>' (GET, OPTIONS, HEAD) -> topics.topic>,
 <Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>,
 <Rule '/users/<username>' (GET, OPTIONS, HEAD) -> users.index>])

然后在 flask 里面添加权限控制页面将每个路径授权给用户。 具体方式为:数据库用户表增加一列,把允许的内容存为字典或者 json 串。每次请求时候比对路径是否在字典里面如果在就允许访问。 扩展开来,类似传参和 get、post 不同的访问也可以很方便的判断。 具体 url_map 使用参考这里: https://segmentfault.com/q/1010000000698148

但是现在有个问题是当启用了 blueprint 后,url_map 居然无法直接显示,大家有啥办法没?

2641 次点击
所在节点    Python
2 条回复
lhx2008
2019-06-30 23:27:44 +08:00
url_map 倒不是关键问题,看一下源码或者搜索一下应该就能解决。主要是需要这么细粒度的权限管理吗,还要查数据库,而且耦合还很严重,加页面得更新数据库
qile1
2019-06-30 23:35:12 +08:00
@lhx2008 加页面就是加功能,肯定得对用户授权吧,如果用户信息保存在数据库,那保存在数据库用户的表里面,不是最合适方式吗。如果不是保存在表里,平常权限应该保存哪里呢?

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

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

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

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

© 2021 V2EX