V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hustlzp
V2EX  ›  Python

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

  •  3
     
  •   hustlzp ·
    hustlzp · 2014-09-09 20:09:04 +08:00 · 12605 次点击
    这是一个创建于 3726 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在项目开发中经常会遇到权限控制的问题,用过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...

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

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

    permission = QuestionAdminPermission(uid)
    if not permission.check():
    return permission.deny()
    elvis_w
        14
    elvis_w  
       2015-11-30 08:44:15 +08:00
    我是一直在用 Flask-Security
    https://pythonhosted.org/Flask-Security/
    fhefh
        15
    fhefh  
       2015-12-16 00:11:55 +08:00
    mark
    hsluoyz
        16
    hsluoyz  
       2019-01-26 09:39:12 +08:00
    现在新推出了一个权限框架,叫 PyCasbin。PyCasbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如 ACL、RBAC、ABAC,还支持对 RESTful API 的控制。现在已经支持 Django、Flask 等 Web 框架了。需要中文文档的话,可以在百度搜索:PyCasbin
    hsluoyz
        17
    hsluoyz  
       2019-01-26 09:39:28 +08:00
    现在新推出了一个权限框架叫 PyCasbin。PyCasbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如 ACL、RBAC、ABAC,还支持对 RESTful API 的控制。现在已经支持 Django、Flask 等 Web 框架了。需要中文文档的话,可以在百度搜索:PyCasbin
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1088 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.