分享在 Flask 中进行简单的权限管理的代码

2014-09-09 20:09:04 +08:00
 hustlzp
在项目开发中经常会遇到权限控制的问题,用过Flask-Principal,不过感觉用得非常不习惯,所以花时间倒腾了一下。

库文件是flask_permission.py

然后在文件rules.py中定义细粒度的Rule。每个Rule类的一般需要定义:

* base():定义该rule的先验rule
* check():定义该rule的检测逻辑
* deny():若该rule未通过,需要做出何种反馈(比如跳转登陆页、返回403等)

接着在permissions.py中根据之前定义的rules拼装各种业务需要的权限,使用`&`与`|`操作符。

最后就可以用了,在examples.py中提供了三种使用示例:

* 用于view的装饰器
* 用于view代码中
* 用于Jinja2中

目前用于现有的小项目还是够用的。如果权限管理的需求非常复杂的话,是hold不住的,估计得祭出RBAC...

https://gist.github.com/hustlzp/011be36d7bd950f21c17
12630 次点击
所在节点    Python
17 条回复
loading
2014-09-09 21:02:02 +08:00
感谢
humiaozuzu
2014-09-09 21:19:43 +08:00
@loading 还有lz,有没有兴趣建立一个群或者邮件列表交流flask相关的技术,官方的邮件列表已经不怎么活跃了
hustlzp
2014-09-09 21:34:05 +08:00
@humiaozuzu 有兴趣啊,形式大家可以考虑一下。qq很少上...因为总觉得qq有点干扰...
humiaozuzu
2014-09-09 21:52:01 +08:00
@hustlzp 不如就用QQ吧,slack 之类的不太方便,邮件列表参与度挺难起来。 QQ群的话,当做异步交流的工具也未尝不可。
tolbkni
2014-09-09 22:07:15 +08:00
@humiaozuzu 没办法异步,除非一直开着 QQ,否则还是会丢失一堆信息的,而且不能按主题索引
humiaozuzu
2014-09-09 22:11:51 +08:00
@tolbkni 有方法异步,手机 QQ 里面可以设置不提醒,可以看到历史。我更希望讨论的结果能写成Blog,不仅仅是邮件列表的主题。而且 flask 的方向并不会太多,简单的讨论会更多些。
hustlzp
2014-09-09 22:23:43 +08:00
@humiaozuzu 可以试试 :)
humiaozuzu
2014-09-09 22:53:56 +08:00
@hustlzp
@loading 发一下 QQ 吧
hustlzp
2014-09-09 22:56:16 +08:00
@humiaozuzu 724475543
gonjay
2014-09-09 23:02:59 +08:00
可以参考下rails的cancan,那个gem质量还是相当不错的
hustlzp
2014-09-09 23:29:04 +08:00
@gonjay 恩恩,找时间看下 :)
prowayne
2015-05-18 19:22:36 +08:00
装饰器模式怎么传参数进去呢
QuestionAdminPermission(question.id)
hustlzp
2015-05-20 09:52:02 +08:00
@prowayne 这是个问题...

目前只能在代码内部这样做:

permission = QuestionAdminPermission(uid)
if not permission.check():
return permission.deny()
elvis_w
2015-11-30 08:44:15 +08:00
我是一直在用 Flask-Security
https://pythonhosted.org/Flask-Security/
fhefh
2015-12-16 00:11:55 +08:00
mark
hsluoyz
2019-01-26 09:39:12 +08:00
现在新推出了一个权限框架,叫 PyCasbin。PyCasbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如 ACL、RBAC、ABAC,还支持对 RESTful API 的控制。现在已经支持 Django、Flask 等 Web 框架了。需要中文文档的话,可以在百度搜索:PyCasbin
hsluoyz
2019-01-26 09:39:28 +08:00
现在新推出了一个权限框架叫 PyCasbin。PyCasbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如 ACL、RBAC、ABAC,还支持对 RESTful API 的控制。现在已经支持 Django、Flask 等 Web 框架了。需要中文文档的话,可以在百度搜索:PyCasbin

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

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

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

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

© 2021 V2EX