{ "info": { "author": "Hyuntak Joo", "author_email": "momamene@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "===============================\ndjango-reinhardt\n===============================\n\n\n.. image:: https://img.shields.io/pypi/v/django-reinhardt.svg\n :target: https://pypi.python.org/pypi/django-reinhardt\n\n.. image:: https://img.shields.io/travis/momamene/django-reinhardt.svg\n :target: https://travis-ci.org/momamene/django-reinhardt\n\n.. image:: https://readthedocs.org/projects/django-reinhardt/badge/?version=latest\n :target: https://django-reinhardt.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://pyup.io/repos/github/momamene/django-reinhardt/shield.svg\n :target: https://pyup.io/repos/github/momamene/django-reinhardt/\n :alt: Updates\n\n\nThere are many object permission backends like `django-guardian `_ or `django-permission `_.\n\nBut some time, it is needed to define permissions as not just object-user relationship.\n\n`django-reinhardt `_ make you handle object permissions by defining methods in your django model\n\n* Free software: MIT license\n* Documentation: https://django-reinhardt.readthedocs.io.\n\n\nInstallation\n------------\nUse pip_ like::\n\n $ pip install django-reinhardt\n\n.. _pip: https://pypi.python.org/pypi/pip\n\nUsage\n-----\nAdd extra authorization backends in your settings.py::\n\n AUTHENTICATION_BACKENDS = (\n 'django.contrib.auth.backends.ModelBackend', # default\n 'reinhardt.backends.PermissionBackend',\n )\n\nIt's done. you don't need to add any app or migrate anything.\n\nAssume that ``Inquiry`` model needs to have two permission: ``change_inqury``, ``view_inquiry`` ::\n\n class Inquiry(models.Model):\n\n writer = models.ForeignKey(settings.AUTH_USER_MODEL)\n text = models.TextField()\n pub_date = models.DateTimeField(auto_now_add=True)\n\n @object_permission(codename='change_inquiry')\n def is_changeable_by(self, user):\n return self.writer == user or user.is_staff\n\n @object_permission(codename='view_inquiry')\n def is_viewable_by(self, user):\n return self.writer == user\n\nThen you can just define methods having ``user`` parameter, decorated by ``object_permission``.\n\nNow the following codes will work as expected: ::\n\n user1 = get_user_model().objects.create(\n username='nanase'\n )\n user2 = get_user_model().objects.create(\n username='maiyan'\n )\n user3 = get_user_model().objects.create(\n username='ikuta'\n )\n inquiry = Inquiry.objects.create(\n writer=self.user1,\n text='How can I delete my account?'\n )\n\n assert user1.has_perm('yourapp.change_inquiry', obj=inquiry) == True\n assert user2.has_perm('yourapp.view_inquiry', obj=inquiry) == False\n assert user3.has_perm('yourapp.change_inquiry', obj=inquiry) == False\n assert user3.has_perm('yourapp.view_inquiry', obj=inquiry) == True\n\n\nCredits\n---------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\n=======\nHistory\n=======\n\n0.2.0 (2016-08-2)\n------------------\n\n* Change the way how to distinguish permission-related method from others.\n* Now you should use ``object_permission`` decorator instead of ``can_`` prefix to define permission methods.\n\n\n0.1.0 (2016-07-19)\n------------------\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/momamene/django-reinhardt/tags", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/momamene/django-reinhardt", "keywords": "django object logical permission auth authentication reinhardt", "license": "MIT license", "maintainer": null, "maintainer_email": null, "name": "django-reinhardt", "package_url": "https://pypi.org/project/django-reinhardt/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-reinhardt/", "project_urls": { "Download": "https://github.com/momamene/django-reinhardt/tags", "Homepage": "https://github.com/momamene/django-reinhardt" }, "release_url": "https://pypi.org/project/django-reinhardt/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Manage object permissions by defining methods in Django Model", "version": "0.2.0" }, "last_serial": 2257464, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "860f94a295ab9dce42daa512149d9992", "sha256": "a23ce1e39e2999e7babc805860bd5006655b33ad6acecb2530259ddbff9f1ef6" }, "downloads": -1, "filename": "django-reinhardt-0.1.0.tar.gz", "has_sig": false, "md5_digest": "860f94a295ab9dce42daa512149d9992", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12187, "upload_time": "2016-08-02T00:38:08", "url": "https://files.pythonhosted.org/packages/4e/eb/c19e03e42789033795ab2de455e99409f23c0457d8ecf743c156e0dd8f8c/django-reinhardt-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1ebb5843344360f8fb336ed399878f79", "sha256": "5bde8b05b5122a736b9a59399155caa9788a8a1a6d07a85d8d9b336a32038988" }, "downloads": -1, "filename": "django-reinhardt-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1ebb5843344360f8fb336ed399878f79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12706, "upload_time": "2016-08-02T11:22:11", "url": "https://files.pythonhosted.org/packages/44/24/8979fce65bb8f30d375d865c65950a6a73bb826df663efc70db69382732a/django-reinhardt-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1ebb5843344360f8fb336ed399878f79", "sha256": "5bde8b05b5122a736b9a59399155caa9788a8a1a6d07a85d8d9b336a32038988" }, "downloads": -1, "filename": "django-reinhardt-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1ebb5843344360f8fb336ed399878f79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12706, "upload_time": "2016-08-02T11:22:11", "url": "https://files.pythonhosted.org/packages/44/24/8979fce65bb8f30d375d865c65950a6a73bb826df663efc70db69382732a/django-reinhardt-0.2.0.tar.gz" } ] }