最近在弄 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 居然无法直接显示,大家有啥办法没?
1
lhx2008 2019-06-30 23:27:44 +08:00 via Android
url_map 倒不是关键问题,看一下源码或者搜索一下应该就能解决。主要是需要这么细粒度的权限管理吗,还要查数据库,而且耦合还很严重,加页面得更新数据库
|