{ "info": { "author": "Blake Printy", "author_email": "bprinty@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\n|Build status| |Code coverage| |Maintenance yes| |GitHub license| |Documentation Status|\n\n.. |Build status| image:: https://github.com/bprinty/Flask-Authorize/actions/workflows/ci.yml/badge.svg\n :target: https://github.com/bprinty/Flask-Authorize/actions/workflows/ci.yml\n\n.. |Code coverage| image:: https://codecov.io/gh/bprinty/Flask-Authorize/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/bprinty/Flask-Authorize\n\n.. |Maintenance yes| image:: https://img.shields.io/badge/Maintained%3F-yes-green.svg\n :target: https://github.com/bprinty/Flask-Authorize/graphs/commit-activity\n\n.. |GitHub license| image:: https://img.shields.io/github/license/bprinty/Flask-Authorize.svg\n :target: https://github.com/bprinty/Flask-Authorize/blob/master/LICENSE\n\n.. |Documentation Status| image:: https://readthedocs.org/projects/flask-authorize/badge/?version=latest\n :target: http://flask-authorize.readthedocs.io/?badge=latest\n\n\n============================\nFlask-Authorize\n============================\n\nFlask-Authorize is a Flask extension designed to simplify the process of incorporating Access Control Lists (ACLs) and Role-Based Access Control (RBAC) into applications housing sensitive data, allowing developers to focus on the actual code for their application instead of logic for enforcing permissions. It uses a unix-like permissions scheme for enforcing access permissions on existing content, and also provides mechanisms for globally enforcing permissions throughout an application.\n\n\nInstallation\n============\n\nTo install the latest stable release via pip, run:\n\n.. code-block:: bash\n\n $ pip install Flask-Authorize\n\n\nAlternatively with easy_install, run:\n\n.. code-block:: bash\n\n $ easy_install Flask-Authorize\n\n\nTo install the bleeding-edge version of the project (not recommended):\n\n.. code-block:: bash\n\n $ git clone http://github.com/bprinty/Flask-Authorize.git\n $ cd Flask-Authorize\n $ python setup.py install\n\n\nUsage\n=====\n\nBelow details a minimal example showcasing how to use the extension. First, to set up the flask application with extensions:\n\n\n.. code-block:: python\n\n from flask import Flask\n from flask_login import LoginManager\n from flask_sqlalchemy import SQLAlchemy\n\n app = Flask(__name__)\n app.config.from_object(Config)\n db = SQLAlchemy(app)\n login = LoginManager(app)\n authorize = Authorize(app)\n\n\nDefining database models:\n\n.. code-block:: python\n\n from flask_authorize import RestrictionsMixin, AllowancesMixin\n from flask_authorize import PermissionsMixin\n\n\n # mapping tables\n UserGroup = db.Table(\n 'user_group', db.Model.metadata,\n db.Column('user_id', db.Integer, db.ForeignKey('users.id')),\n db.Column('group_id', db.Integer, db.ForeignKey('groups.id'))\n )\n\n\n UserRole = db.Table(\n 'user_role', db.Model.metadata,\n db.Column('user_id', db.Integer, db.ForeignKey('users.id')),\n db.Column('role_id', db.Integer, db.ForeignKey('roles.id'))\n )\n\n\n # models\n class User(db.Model):\n __tablename__ = 'users'\n\n id = db.Column(db.Integer, primary_key=True)\n name = db.Column(db.String(255), nullable=False, unique=True)\n\n # `roles` and `groups` are reserved words that *must* be defined\n # on the `User` model to use group- or role-based authorization.\n roles = db.relationship('Role', secondary=UserRole)\n groups = db.relationship('Group', secondary=UserGroup)\n\n\n class Group(db.Model, RestrictionsMixin):\n id = db.Column(db.Integer, primary_key=True)\n name = db.Column(db.String(255), nullable=False, unique=True)\n\n\n class Role(db.Model, AllowancesMixin):\n id = db.Column(db.Integer, primary_key=True)\n name = db.Column(db.String(255), nullable=False, unique=True)\n\n\n class Article(db.Model, PermissionsMixin):\n __tablename__ = 'articles'\n __permissions__ = dict(\n owner=['read', 'update', 'delete', 'revoke'],\n group=['read', 'update'],\n other=['read']\n )\n\n id = db.Column(db.Integer, primary_key=True)\n name = db.Column(db.String(255), index=True, nullable=False)\n\n\nDefining endpoint actions:\n\n.. code-block:: python\n\n from flask import jsonify\n from werkzeug import NotFound, Unauthorized\n\n @app.route('/articles', methods=['POST'])\n @login.logged_in\n @authorize.create(Article)\n def article():\n article = Article(**request.json)\n db.session.add(article)\n db.session.commit()\n return jsonify(msg='Created Article'), 200\n\n @app.route('/articles/', methods=['GET', 'PUT', 'DELETE'])\n @login.logged_in\n def single_article(ident):\n article = db.session.query(Article).filter_by(id=ident).first()\n if not article:\n raise NotFound\n\n if request.method == 'GET':\n\n # check if the current user is authorized to read the article\n if not authorize.read(article):\n raise Unauthorized\n\n return jsonify(id=article.id, name=article.name), 200\n\n elif request.method == 'PUT':\n\n # check if the current user is authorized to update to the article\n if not authorize.update(article):\n raise Unauthorized\n\n for key, value in request.json.items():\n setattr(article, key, value)\n db.session.commit()\n\n return jsonify(id=article.id, name=article.name), 200\n\n elif request.method == 'DELETE':\n\n # check if the current user is associated with the 'admin' role\n if not authorize.delete(article) or \\\n not authorize.has_role('admin'):\n raise Unauthorized\n\n db.session.delete(article)\n db.session.commit()\n\n return\n\n @app.route('/articles//revoke', methods=['POST'])\n @login.logged_in\n def revoke_article(ident):\n article = db.session.query(Article).filter_by(id=ident).first()\n if not article:\n raise NotFound\n\n # check if the current user can revoke the article\n if not authorize.revoke(article):\n raise Unauthorized\n\n article.revoked = True\n db.session.commit()\n\n return\n\n\nAdditionally, if you've configured your application to dispatch request processing to API functions, you can use the ``authorize`` extension object as a decorator:\n\n.. code-block:: python\n\n @authorize.create(Article)\n def create_article(name):\n article = Article(**request.json)\n db.session.add(article)\n db.session.commit()\n return article\n\n @authorize.read\n def read_article(article):\n return article\n\n @authorize.update\n def update_article(article, **kwargs):\n for key, value in request.json.items():\n setattr(article, key, value)\n db.session.commit()\n return article\n\n @authorize.delete\n def delete_article(article):\n db.session.delete(article)\n return\n\n @authorize.revoke\n def revoke_article(article):\n article.revoke = True\n db.session.commit()\n return\n\n @authorize.has_role('admin')\n def get_admin_articles():\n pass\n\n\nUsing the extension as a decorator goes a long way in removing boilerplate associated with permissions checking. Additionally, using the ``authorize`` extension object as a decorator will implicitly check the current user's access to each argument or keyword argument to the function. For example, if your method takes two ``Article`` objects and merges them into one, you can add permissions for both operations like so:\n\n.. code-block:: python\n\n @authorize.read\n @authorize.create(Article)\n def merge_articles(article1, article2):\n new_article = Article(name=article1.name + article.2.name)\n db.session.add(new_article)\n db.session.delete(article1, article2)\n db.session.commit()\n return new_article\n\n\nThis function will ensure that the current user has read access to both articles and also create permissions on the **Article** model itself. If the authorization criteria aren't satisfied, an ``Unauthorized`` error will be thrown.\n\nFinally, the ``authorize`` operator is also available in Jinja templates:\n\n.. code-block:: html\n\n \n {% if authorize.create('articles') %}\n \n {% endif %}\n\n \n {% for article in articles %}\n\n \n {% if authorize.read(article) %}\n

{{ article.name }}

\n\n \n {% if authorize.update(article) %}\n \n {% endif %}\n\n \n {% if authorize.in_group('admins') %}\n \n {% endif %}\n\n {% endif %}\n {% endfor %}\n\n\nDocumentation\n=============\n\nFor more detailed documentation, see the `Docs `_.\n\n\nQuestions/Feedback\n==================\n\nFile an issue in the `GitHub issue tracker `_.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bprinty/Flask-Authorize", "keywords": "Flask-Authorize,flask,permissions,authorization,authz,acl,rbac,user,group,role", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Flask-Authorize", "package_url": "https://pypi.org/project/Flask-Authorize/", "platform": "any", "project_url": "https://pypi.org/project/Flask-Authorize/", "project_urls": { "Homepage": "https://github.com/bprinty/Flask-Authorize" }, "release_url": "https://pypi.org/project/Flask-Authorize/0.2.6/", "requires_dist": [ "six", "Flask", "SQLAlchemy", "Flask-SQLAlchemy" ], "requires_python": "", "summary": "Flask plugin for content authorization and access control", "version": "0.2.6", "yanked": false, "yanked_reason": null }, "last_serial": 9880311, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "977d0fdf44e70dd97f5f9bfe6d6916bd", "sha256": "87d9aba83463ec49ac3eb30a207e748196f978962ed26e744cd7a598f1e07190" }, "downloads": -1, "filename": "Flask_Authorize-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "977d0fdf44e70dd97f5f9bfe6d6916bd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12962, "upload_time": "2019-10-31T05:21:31", "upload_time_iso_8601": "2019-10-31T05:21:31.847574Z", "url": "https://files.pythonhosted.org/packages/b3/95/57af4dfa917f7b3ede0326ebe9dddd3fad44a77955de00ae156e11c59af4/Flask_Authorize-0.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e69064a7d7e66aafa3a0c2b5a79c4a7e", "sha256": "746eea7abef9f0d2ca5862008000f62fbfe4d67960b9d859cea40a1270e70ef3" }, "downloads": -1, "filename": "Flask-Authorize-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e69064a7d7e66aafa3a0c2b5a79c4a7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 278310, "upload_time": "2019-10-31T05:21:35", "upload_time_iso_8601": "2019-10-31T05:21:35.170116Z", "url": "https://files.pythonhosted.org/packages/78/24/45d281836f2a850e59f4ee1a7dbab6cc1b922fd344b8a15612902da01275/Flask-Authorize-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "35f89d1ecca5177315efbe3dcf46c7c1", "sha256": "62da3792fed0b0817667ca7b78b9d49272b744d9f1d9ee56f9211616c9a349d8" }, "downloads": -1, "filename": "Flask_Authorize-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35f89d1ecca5177315efbe3dcf46c7c1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13504, "upload_time": "2019-10-31T05:31:50", "upload_time_iso_8601": "2019-10-31T05:31:50.212569Z", "url": "https://files.pythonhosted.org/packages/32/c2/e13c70fe24cfe401f7966f2289e4cb87b0b5fca111ff162e0a3842e52d64/Flask_Authorize-0.1.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6f4671a3e62800d89257af5c814aeefd", "sha256": "06637117960de0be8cd5cdecdcc601b09f8462126254811ad4572c46d96d7db7" }, "downloads": -1, "filename": "Flask-Authorize-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6f4671a3e62800d89257af5c814aeefd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 278927, "upload_time": "2019-10-31T05:31:52", "upload_time_iso_8601": "2019-10-31T05:31:52.261364Z", "url": "https://files.pythonhosted.org/packages/5e/b9/2f2047033a176090cd6e2dca015c058e71160888cab74ae9a2bb9956ac31/Flask-Authorize-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "2a8553387ec59cc9832a558ae6dd2046", "sha256": "0800cd611f94548e1bcd30112adeb80ce5af3b0e3e2a0bd850d55ccb341e2e96" }, "downloads": -1, "filename": "Flask_Authorize-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a8553387ec59cc9832a558ae6dd2046", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12286, "upload_time": "2020-04-23T10:09:53", "upload_time_iso_8601": "2020-04-23T10:09:53.090264Z", "url": "https://files.pythonhosted.org/packages/7a/7e/fc8a741281b0860e14cd5022906d0ca0590be313c495a98e479874c1112f/Flask_Authorize-0.1.10-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8591bc59657c628507e5a6c6d6cecb8e", "sha256": "614965136c8fe45b4031e17a0ada5cc69640aabec1b7d93e80a07f19d038dfe6" }, "downloads": -1, "filename": "Flask-Authorize-0.1.10.tar.gz", "has_sig": false, "md5_digest": "8591bc59657c628507e5a6c6d6cecb8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 280634, "upload_time": "2020-04-23T10:09:54", "upload_time_iso_8601": "2020-04-23T10:09:54.958376Z", "url": "https://files.pythonhosted.org/packages/af/26/55b328105ebb4226289ccee3c27282248dba3326162e8b27713d0a420ab2/Flask-Authorize-0.1.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f79abecfa568c372b341b1c9283599da", "sha256": "b1088cf001e702f05f5fafcbf79db36f8b7bd70202d25685f578f2b31c196f6a" }, "downloads": -1, "filename": "Flask_Authorize-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f79abecfa568c372b341b1c9283599da", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13510, "upload_time": "2019-11-05T04:45:50", "upload_time_iso_8601": "2019-11-05T04:45:50.645852Z", "url": "https://files.pythonhosted.org/packages/ee/3d/874139903cce4ca48bb12a1d35e70efd208db0d81a787075a25908ccb9e3/Flask_Authorize-0.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "459ea4922d349297c2ac6c243be068c5", "sha256": "62ab931812c4a8ddcf401229b9a13d30302c9ffae656fccad00a52e81bca2d13" }, "downloads": -1, "filename": "Flask-Authorize-0.1.2.tar.gz", "has_sig": false, "md5_digest": "459ea4922d349297c2ac6c243be068c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 278955, "upload_time": "2019-11-05T04:45:52", "upload_time_iso_8601": "2019-11-05T04:45:52.897207Z", "url": "https://files.pythonhosted.org/packages/a5/c3/601fe97d5415f8833f82248713dfb8872890b5308e4329c1854ea5f424fb/Flask-Authorize-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a3d3813e9ce29bf9304d36e31a14bdfb", "sha256": "e7097c97372e5d3464f4e35d1e224686d76dbadadee0e4428ed5ccc22503301a" }, "downloads": -1, "filename": "Flask_Authorize-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a3d3813e9ce29bf9304d36e31a14bdfb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13553, "upload_time": "2019-11-06T05:33:49", "upload_time_iso_8601": "2019-11-06T05:33:49.525664Z", "url": "https://files.pythonhosted.org/packages/c2/6a/ff1af882c232e69220727fb46e07be51847116ff21fad499ceaf48c1a96d/Flask_Authorize-0.1.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2caec6b4c600b82605cd4ee40b1339d5", "sha256": "ff208ac589c32bf212bb7afaa2a783e2aa5d5c3157cbfe58829a2ae48065cdf2" }, "downloads": -1, "filename": "Flask-Authorize-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2caec6b4c600b82605cd4ee40b1339d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279002, "upload_time": "2019-11-06T05:33:51", "upload_time_iso_8601": "2019-11-06T05:33:51.624197Z", "url": "https://files.pythonhosted.org/packages/32/d2/eb08a4b5566ebda2f94eba64215b1af833882d6ceb71a7b088323eda1b7c/Flask-Authorize-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "f2aafd84e269f0fb2239c078f2967dd5", "sha256": "672ee26eb8be78f440d60c5ed39f97168bd21f88aa289d300b40deb385be876d" }, "downloads": -1, "filename": "Flask_Authorize-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f2aafd84e269f0fb2239c078f2967dd5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14000, "upload_time": "2019-11-07T06:41:48", "upload_time_iso_8601": "2019-11-07T06:41:48.971312Z", "url": "https://files.pythonhosted.org/packages/c9/75/16f0d894a2b2ce54d03ca6bf6e045cbf570558bca133f0a932dd378f4bbc/Flask_Authorize-0.1.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "82623bd02702b615a0acd778dae39566", "sha256": "98b20628ddbfb445bcc7d13ad595760c43c6252dcde2d426490620d05720f35f" }, "downloads": -1, "filename": "Flask-Authorize-0.1.4.tar.gz", "has_sig": false, "md5_digest": "82623bd02702b615a0acd778dae39566", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 280622, "upload_time": "2019-11-07T06:41:51", "upload_time_iso_8601": "2019-11-07T06:41:51.173431Z", "url": "https://files.pythonhosted.org/packages/fa/c6/38efe4c03e401ac7e1213c53075adfbb9f4a4e17f84a62b45b76e424220e/Flask-Authorize-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "17b5ca4853b49071d631e1c589163c79", "sha256": "70f35b6a804a0081f4d7fae65d48acfef693e03fbaf43738cdab1f6c71fb28e6" }, "downloads": -1, "filename": "Flask_Authorize-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17b5ca4853b49071d631e1c589163c79", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14503, "upload_time": "2019-11-08T02:48:01", "upload_time_iso_8601": "2019-11-08T02:48:01.687133Z", "url": "https://files.pythonhosted.org/packages/e0/e0/b550ed001cf335be37918fde50afe0c69eedad98adaf260cf33cab1a7b8b/Flask_Authorize-0.1.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7d34eb985f95fd07c04b10cb5795f762", "sha256": "9e0951bcb279010cf8241d6e8531ee814221bf6a5c9dd98923572e92d2222394" }, "downloads": -1, "filename": "Flask-Authorize-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7d34eb985f95fd07c04b10cb5795f762", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 281205, "upload_time": "2019-11-08T02:48:03", "upload_time_iso_8601": "2019-11-08T02:48:03.965925Z", "url": "https://files.pythonhosted.org/packages/1f/13/ba79a1713310282275646b2e860e0fdd88c8cf2cc7a4048015718059f54e/Flask-Authorize-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "8c661e9c7b24077f140dc6d4d28d65c6", "sha256": "da5aa0f70c7806901511eeebfc58e11d4c5dc91e28026f273606777d31170159" }, "downloads": -1, "filename": "Flask_Authorize-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8c661e9c7b24077f140dc6d4d28d65c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15060, "upload_time": "2019-11-09T07:07:53", "upload_time_iso_8601": "2019-11-09T07:07:53.695895Z", "url": "https://files.pythonhosted.org/packages/5c/a8/a4b12019f4bff9a3e95fceebd3305418b6507e07d4d08c084019761cc033/Flask_Authorize-0.1.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5343b2f99e66e086d7e09bdca01fd85e", "sha256": "1f94f65bce253cb4516878d021d1edfa2b6eea4eb447639a4f0dc92d4ec31769" }, "downloads": -1, "filename": "Flask-Authorize-0.1.6.tar.gz", "has_sig": false, "md5_digest": "5343b2f99e66e086d7e09bdca01fd85e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282331, "upload_time": "2019-11-09T07:07:57", "upload_time_iso_8601": "2019-11-09T07:07:57.293288Z", "url": "https://files.pythonhosted.org/packages/93/56/78659749a59cf8147899cf19074d4fa5584475acebac170850a17f43b616/Flask-Authorize-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "549d4470a3f4446b5a96c1ad428af1ad", "sha256": "8c9afe0bee19ab80af66a3304cb0687da347bcc98f85c9782e0ffedcfcadffa6" }, "downloads": -1, "filename": "Flask_Authorize-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "549d4470a3f4446b5a96c1ad428af1ad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12092, "upload_time": "2019-11-24T17:14:41", "upload_time_iso_8601": "2019-11-24T17:14:41.441059Z", "url": "https://files.pythonhosted.org/packages/63/e9/4a61b6bce1c5f3bf1c38a9dd23eb81802a620a6588e384b205167a97752f/Flask_Authorize-0.1.7-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5dd51c96c78c513c99ff0abd5a136e14", "sha256": "b6a1825b99dc8e0eed4289b469371ae9ae9ac3f3a5a884e2eda91d5b0cde92d5" }, "downloads": -1, "filename": "Flask-Authorize-0.1.7.tar.gz", "has_sig": false, "md5_digest": "5dd51c96c78c513c99ff0abd5a136e14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 278499, "upload_time": "2019-11-24T17:14:43", "upload_time_iso_8601": "2019-11-24T17:14:43.539435Z", "url": "https://files.pythonhosted.org/packages/68/7f/167405aa9350ddf593a07cc413f59665dfc72a2d48260d96c17f3dc90a54/Flask-Authorize-0.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "0dd7084eb5e2ecd150f035076828be18", "sha256": "dcdca723e9537f4357d254b9974b310d0a5afbb412f139e5787ba8d1783fb2cc" }, "downloads": -1, "filename": "Flask_Authorize-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0dd7084eb5e2ecd150f035076828be18", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12181, "upload_time": "2019-12-12T23:25:40", "upload_time_iso_8601": "2019-12-12T23:25:40.710395Z", "url": "https://files.pythonhosted.org/packages/55/b2/0ebe1dd0fdefabad4e291a9543e4c428c5f7c5b4d4d91e3cef29af851356/Flask_Authorize-0.1.8-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1aaedc6803d415573b6dc7dc8678a9e2", "sha256": "62bb25051d661eb13fb97eed58aa676e6b0a83e7a9dda0f90b31dabc2e45b682" }, "downloads": -1, "filename": "Flask-Authorize-0.1.8.tar.gz", "has_sig": false, "md5_digest": "1aaedc6803d415573b6dc7dc8678a9e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279050, "upload_time": "2019-12-12T23:25:42", "upload_time_iso_8601": "2019-12-12T23:25:42.737231Z", "url": "https://files.pythonhosted.org/packages/25/34/a08f9598732e72e32e8e50274496bf4ef2b8191cd8d1e71b1c4b84702910/Flask-Authorize-0.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "2b6424630b7315e244c48476ad892db8", "sha256": "439c30d88521001cd4abfc33e7fecfb1544038a851841a5259c142c66a82ae65" }, "downloads": -1, "filename": "Flask_Authorize-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b6424630b7315e244c48476ad892db8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12178, "upload_time": "2020-04-13T09:53:38", "upload_time_iso_8601": "2020-04-13T09:53:38.394227Z", "url": "https://files.pythonhosted.org/packages/f3/b8/c0e305a72d50b9ca0b6f508a06253bd0616e3253191ee821602439d2b067/Flask_Authorize-0.1.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "31d823939aeaa0a094e4817acc9a652a", "sha256": "5ed146bd9e172b97301fd436d0e835d3cbe5a18d7986756a3cb24d047da83d57" }, "downloads": -1, "filename": "Flask-Authorize-0.1.9.tar.gz", "has_sig": false, "md5_digest": "31d823939aeaa0a094e4817acc9a652a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279486, "upload_time": "2020-04-13T09:53:40", "upload_time_iso_8601": "2020-04-13T09:53:40.234009Z", "url": "https://files.pythonhosted.org/packages/b2/b3/e3d2a6338560aa2e0097861bcf6e78946672b95772c0b1c9739a54c108aa/Flask-Authorize-0.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9d5d2275f273bf8fbff813259141c8d9", "sha256": "5793b197b5cffe048d5db0e8c391711fd6d3be6be13690de7db89c83dbb745cd" }, "downloads": -1, "filename": "Flask_Authorize-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d5d2275f273bf8fbff813259141c8d9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12303, "upload_time": "2020-04-29T10:32:10", "upload_time_iso_8601": "2020-04-29T10:32:10.868065Z", "url": "https://files.pythonhosted.org/packages/4b/96/b863212e1362a05093edae3af18641d1c02289cca7235ed3212c23409d5d/Flask_Authorize-0.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b0e5e582ddc65868f08ae3664d5256fb", "sha256": "14aeef96465a1a5ab8874b1f99d802a99476606d63331023ad455f4c0507cfb4" }, "downloads": -1, "filename": "Flask-Authorize-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b0e5e582ddc65868f08ae3664d5256fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 280735, "upload_time": "2020-04-29T10:32:12", "upload_time_iso_8601": "2020-04-29T10:32:12.501298Z", "url": "https://files.pythonhosted.org/packages/ff/2a/f44b09059bba7ed6c2d5bb1f28d0216fdc16715f01369e11c7695cea0b68/Flask-Authorize-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "541a10064c79a3a1565cdc7db55b7e8d", "sha256": "5110da6696b912ee239752cc75e51b0a2e61c75f300e7ad6e9c01e8be6304d7b" }, "downloads": -1, "filename": "Flask_Authorize-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "541a10064c79a3a1565cdc7db55b7e8d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12302, "upload_time": "2020-11-19T21:29:22", "upload_time_iso_8601": "2020-11-19T21:29:22.175586Z", "url": "https://files.pythonhosted.org/packages/78/75/a2528ba57bc2068d9aadfcc1fea659b42adfc8f27ce4321000b2ee5c93fe/Flask_Authorize-0.2.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f37920e04eb035a26364a5e35668c35a", "sha256": "11f97431acfbf9bdc932d763e8b0789ce73ac81e913f1a21e2f0ae6d88eb7093" }, "downloads": -1, "filename": "Flask-Authorize-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f37920e04eb035a26364a5e35668c35a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282485, "upload_time": "2020-11-19T21:29:24", "upload_time_iso_8601": "2020-11-19T21:29:24.064473Z", "url": "https://files.pythonhosted.org/packages/9e/13/8d0300e9cf5db893d415875fa5646831e0ca03943a5e2c8243da981347f1/Flask-Authorize-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "1ff587482348fa297a33c7d15aa7352c", "sha256": "72e8ff38b371857fa53279e69806bd09ebdc306a0e17afe209bab439c5deae49" }, "downloads": -1, "filename": "Flask_Authorize-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1ff587482348fa297a33c7d15aa7352c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12308, "upload_time": "2020-12-11T22:51:11", "upload_time_iso_8601": "2020-12-11T22:51:11.223396Z", "url": "https://files.pythonhosted.org/packages/fa/89/9ec36dc5fc85562d26edb25bf69e34681600e02be94ca1a5fb9c1ea7b011/Flask_Authorize-0.2.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7422f4929ea8789e027f5efb9e1f53c2", "sha256": "abe387cb5832e785104cacf67d3247cefdcb6980a29a5381aa35679132fc979e" }, "downloads": -1, "filename": "Flask-Authorize-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7422f4929ea8789e027f5efb9e1f53c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282505, "upload_time": "2020-12-11T22:51:13", "upload_time_iso_8601": "2020-12-11T22:51:13.143312Z", "url": "https://files.pythonhosted.org/packages/95/98/99833db6c15cc6f9bc32977e3694c623d3f5240ba512855eb27028428504/Flask-Authorize-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "15f79b28de7f7ee4a5bd95786b81ea12", "sha256": "39c7af01ba977a35fb9e5bd52ec7c90bf9ff4a115693d88e6f7bb03d9b4fc121" }, "downloads": -1, "filename": "Flask_Authorize-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "15f79b28de7f7ee4a5bd95786b81ea12", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12663, "upload_time": "2021-02-02T18:02:27", "upload_time_iso_8601": "2021-02-02T18:02:27.369330Z", "url": "https://files.pythonhosted.org/packages/41/22/25ac06a4b49007b629a483cfd4366d02bfb2bb055b4dbf25a624c33a2c56/Flask_Authorize-0.2.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d9450b026700aa657e37f1ccb822be8c", "sha256": "21f6133e124510b868f6aeeca9c6329dbf8336da87e0b077726dfcc1ce1702ff" }, "downloads": -1, "filename": "Flask-Authorize-0.2.3.tar.gz", "has_sig": false, "md5_digest": "d9450b026700aa657e37f1ccb822be8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282861, "upload_time": "2021-02-02T18:02:29", "upload_time_iso_8601": "2021-02-02T18:02:29.259258Z", "url": "https://files.pythonhosted.org/packages/ae/50/25d8558814c185e6ae3f148cd51aa43a4c4777840887717ada7ecc40415b/Flask-Authorize-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "52d31a99a51237f59384c126c4077ae9", "sha256": "41291b376e0056201a0390f055620b687816b81bfdd82b60f36886f08f46241a" }, "downloads": -1, "filename": "Flask_Authorize-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52d31a99a51237f59384c126c4077ae9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12686, "upload_time": "2021-02-02T18:09:41", "upload_time_iso_8601": "2021-02-02T18:09:41.163245Z", "url": "https://files.pythonhosted.org/packages/2c/6e/4d7749d939e0b609de9dee09fa8849fb90428a6f98d17eca8291ab3ae3d5/Flask_Authorize-0.2.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8acf6179313448d6870f61eaa4db8b19", "sha256": "742f8e07435fc74fcc5284b59670f19902c417b7dfa146e1c35a7537c14126f3" }, "downloads": -1, "filename": "Flask-Authorize-0.2.4.tar.gz", "has_sig": false, "md5_digest": "8acf6179313448d6870f61eaa4db8b19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282882, "upload_time": "2021-02-02T18:09:43", "upload_time_iso_8601": "2021-02-02T18:09:43.245424Z", "url": "https://files.pythonhosted.org/packages/79/03/b30cd7fda67c53c60f8d0930a4d3655fe3861980141721b50281a177b046/Flask-Authorize-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "481a068b3147d56d46addb863b1fa581", "sha256": "8e9b3e707e1996685f9867d6c3267fede5204515b2f887e30e64465836235e43" }, "downloads": -1, "filename": "Flask_Authorize-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "481a068b3147d56d46addb863b1fa581", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12758, "upload_time": "2021-03-25T16:26:56", "upload_time_iso_8601": "2021-03-25T16:26:56.064838Z", "url": "https://files.pythonhosted.org/packages/ff/fa/12b312bbbe1ee6bca5112b45d5481cc5ed47fb550047cea03829c852730b/Flask_Authorize-0.2.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "37ce519e69b644eba64eb47876c2c4b2", "sha256": "d22a03b7b78ad7dcd46b5f6c68903c96e74e9452b4c2871e497fb793bb29f75a" }, "downloads": -1, "filename": "Flask-Authorize-0.2.5.tar.gz", "has_sig": false, "md5_digest": "37ce519e69b644eba64eb47876c2c4b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 286533, "upload_time": "2021-03-25T16:26:57", "upload_time_iso_8601": "2021-03-25T16:26:57.683480Z", "url": "https://files.pythonhosted.org/packages/64/24/a6eadbf9fe3f9a10b70bd8ee1c3b8670209d1af8743a0f5bfe58428db119/Flask-Authorize-0.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "109b22fa24db2c3db1585c00c83c2c58", "sha256": "2ce54e623d72b9d3614eba9f8737309948aaba9bbc32c4b4b19ee53e86919829" }, "downloads": -1, "filename": "Flask_Authorize-0.2.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "109b22fa24db2c3db1585c00c83c2c58", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12734, "upload_time": "2021-03-25T19:00:16", "upload_time_iso_8601": "2021-03-25T19:00:16.824591Z", "url": "https://files.pythonhosted.org/packages/20/a2/44a957627976036787f4e7c25918d5e8af05964e30ae258964dfe1e638b8/Flask_Authorize-0.2.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bd7a4ca56ca54f2d94bfb77f7e3d5b95", "sha256": "b3d905552ed69d97131cfcaa62609c6b04440ff6a1da6a0397f0867dea7001c6" }, "downloads": -1, "filename": "Flask-Authorize-0.2.6.tar.gz", "has_sig": false, "md5_digest": "bd7a4ca56ca54f2d94bfb77f7e3d5b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 286546, "upload_time": "2021-03-25T19:00:18", "upload_time_iso_8601": "2021-03-25T19:00:18.899359Z", "url": "https://files.pythonhosted.org/packages/07/63/43668cc42a9ad8bc24d3b17bcc56eebc2c2426ca0c60efa91be50038d827/Flask-Authorize-0.2.6.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "109b22fa24db2c3db1585c00c83c2c58", "sha256": "2ce54e623d72b9d3614eba9f8737309948aaba9bbc32c4b4b19ee53e86919829" }, "downloads": -1, "filename": "Flask_Authorize-0.2.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "109b22fa24db2c3db1585c00c83c2c58", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12734, "upload_time": "2021-03-25T19:00:16", "upload_time_iso_8601": "2021-03-25T19:00:16.824591Z", "url": "https://files.pythonhosted.org/packages/20/a2/44a957627976036787f4e7c25918d5e8af05964e30ae258964dfe1e638b8/Flask_Authorize-0.2.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bd7a4ca56ca54f2d94bfb77f7e3d5b95", "sha256": "b3d905552ed69d97131cfcaa62609c6b04440ff6a1da6a0397f0867dea7001c6" }, "downloads": -1, "filename": "Flask-Authorize-0.2.6.tar.gz", "has_sig": false, "md5_digest": "bd7a4ca56ca54f2d94bfb77f7e3d5b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 286546, "upload_time": "2021-03-25T19:00:18", "upload_time_iso_8601": "2021-03-25T19:00:18.899359Z", "url": "https://files.pythonhosted.org/packages/07/63/43668cc42a9ad8bc24d3b17bcc56eebc2c2426ca0c60efa91be50038d827/Flask-Authorize-0.2.6.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }