{ "info": { "author": "Arnaud Grausem", "author_email": "arnaud.grausem@unistra.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "django-rest-framework-fine-permissions\n======================================\n\nNew permissions possibilities for rest-framework\n\nCompatibility\n-------------\n\nWorks with :\n\n * Python 2.7, 3.4, 3.5, 3.6\n * Django >= 1.10\n * Django Rest Framework >= 3.5\n\n.. image:: https://travis-ci.org/unistra/django-rest-framework-fine-permissions.svg?branch=master\n :target: https://travis-ci.org/unistra/django-rest-framework-fine-permissions\n\n.. image:: https://coveralls.io/repos/github/unistra/django-rest-framework-fine-permissions/badge.svg?branch=master\n :target: https://coveralls.io/github/unistra/django-rest-framework-fine-permissions?branch=master\n\n.. image:: https://landscape.io/github/unistra/django-rest-framework-fine-permissions/master/landscape.svg?style=flat\n :target: https://landscape.io/github/unistra/django-rest-framework-fine-permissions/master\n :alt: Code Health\n\n\nInstallation\n------------\n\nInstall the package from pypi :\n\n.. code-block:: sh\n\n pip install djangorestframework-fine-permissions\n\nConfigure your `settings.py` module :\n\n.. code-block:: python\n\n INSTALLED_APPS = (\n ...\n 'rest_framework_fine_permissions',\n )\n\n REST_FRAMEWORK = {\n 'DEFAULT_FILTER_BACKENDS': (\n # Enable the filter permission backend for all GenericAPIView\n 'rest_framework_fine_permissions.filters.FilterPermissionBackend',\n ),\n\n 'DEFAULT_PERMISSION_CLASSES': (\n # Enable the django model permissions (view,create,delete,modify)\n 'rest_framework_fine_permissions.permissions.FullDjangoModelPermissions',\n # OPTIONAL if you use FilterPermissionBackend and GenericAPIView. Check filter permissions for objects.\n 'rest_framework_fine_permissions.permissions.FilterPermission',\n )\n }\n\nSync the django's database :\n\n.. code-block:: sh\n\n python manage.py syncdb\n\nEdit your `urls.py` module :\n\n.. code-block:: python\n\n from django.conf.urls import url\n from django.contrib import admin\n from rest_framework_fine_permissions.urls import urlpatterns as drffp_urls\n\n urlpatterns = [\n url(r'^admin/', admin.site.urls),\n ]\n urlpatterns += drffp_urls\n\nUsage\n-----\n\n * Go to the django admin page\n * Add field's permissions to a user with the \"User fields permissions\" link\n * Add filter's permissions to a user with the \"User filters permissions\" link\n\nExample\n-------\n\n``models.py`` :\n\n.. code-block:: python\n\n from django.db import models\n from django.db.models import Sum\n\n class PollsChoice(models.Model):\n id = models.IntegerField(primary_key=True)\n choice_text = models.CharField(max_length=200)\n votes = models.IntegerField()\n question = models.ForeignKey('PollsQuestion')\n\n class Meta:\n permissions = (('view_pollschoice', 'Can view pollschoice'),)\n\n class PollsQuestion(models.Model):\n id = models.IntegerField(primary_key=True)\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField()\n\n class Meta:\n permissions = (('view_pollsquestion', 'Can view pollsquestion'),)\n\n @property\n def sum_votes(self):\n return self.pollschoice_set.aggregate(total=Sum('votes'))['total']\n\n @property\n def choices(self):\n return self.pollschoice_set.all()\n\n``serializers.py`` :\n\n.. code-block:: python\n\n import datetime\n from django.utils import timezone\n from rest_framework import serializers\n from rest_framework_fine_permissions.fields import ModelPermissionsField\n from rest_framework_fine_permissions.serializers import ModelPermissionsSerializer\n\n from . import models\n\n class PollsChoiceSerializer(ModelPermissionsSerializer):\n class Meta:\n model = models.PollsChoice\n\n class PollsQuestionSerializer(ModelPermissionsSerializer):\n was_published_recently = serializers.SerializerMethodField()\n votes = serializers.IntegerField(source='sum_votes')\n choices = ModelPermissionsField(PollsChoiceSerializer)\n\n class Meta:\n model = models.PollsQuestion\n\n def get_was_published_recently(self, obj):\n return obj.pub_date >= timezone.now() - datetime.timedelta(days=1)\n\n``views.py`` :\n\n.. code-block:: python\n\n from . import models\n from . import serializers\n from rest_framework import generics\n\n class PollsChoiceDetail(generics.RetrieveUpdateDestroyAPIView):\n queryset = models.PollsChoice.objects.all()\n serializer_class = serializers.PollsChoiceSerializer\n\n``urls.py`` :\n\n.. code-block:: python\n\n from django.conf.urls import patterns, url\n from rest_framework.urlpatterns import format_suffix_patterns\n from . import views\n\n urlpatterns = [,\n url(r'^pollsquestion/(?P\\w+)$', views.PollsQuestionDetail.as_view(), name='pollsquestion-all-detail'),\n ]\n urlpatterns = format_suffix_patterns(urlpatterns, suffix_required=True)\n\nCreate a user without the staff and superuser status, and add him permissions :\n\n.. image:: docs/admin1.png\n\nThen add user field permissions :\n\n.. image:: docs/admin2.png\n\nYou can finally call your webservice :\n\n.. code-block:: sh\n\n $ curl -X GET -H \"Authorization: Token TOKEN\" -H \"Accept: application/json; indent=4\" http://127.0.0.1/webservice/pollsquestion/1.json\n {\n \"choices\": [\n {\n \"choice_text\": \"Yes\",\n \"id\": 1,\n \"votes\": 5\n },\n {\n \"choice_text\": \"No\",\n \"id\": 2,\n \"votes\": 2\n }\n ],\n \"id\": 1,\n \"pub_date\": \"2017-01-08T09:00:00\",\n \"question_text\": \"Is this a question ?\",\n \"votes\": 7,\n \"was_published_recently\": false\n }\n\nImport/Export\n-------------\n\nTo export field's permissions, you can use the following command : ::\n\n python manage.py fine_permissions_dump myuser > /tmp/myuserfieldsperms.json\n\nTo import field's permissions, you can use the following command : ::\n\n python manage.py fine_permissions_load -u anotheruser /tmp/myuserfieldsperms.json\n", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/djangorestframework-fine-permissions", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/unistra/django-rest-framework-fine-permissions", "keywords": "django", "license": "", "maintainer": "", "maintainer_email": "", "name": "djangorestframework-fine-permissions", "package_url": "https://pypi.org/project/djangorestframework-fine-permissions/", "platform": "", "project_url": "https://pypi.org/project/djangorestframework-fine-permissions/", "project_urls": { "Download": "https://pypi.python.org/pypi/djangorestframework-fine-permissions", "Homepage": "https://github.com/unistra/django-rest-framework-fine-permissions" }, "release_url": "https://pypi.org/project/djangorestframework-fine-permissions/0.7.0/", "requires_dist": null, "requires_python": "", "summary": "Field level permissions for Django REST Framework", "version": "0.7.0" }, "last_serial": 4060875, "releases": { "0.2.0": [], "0.2.1": [ { "comment_text": "", "digests": { "md5": "38578007329d5d8154f2e8fd0d1918ec", "sha256": "5e20e9001cfcc0637b7ed6bd16f9e8f62f828e4bf182f5abcf73f78fa7120d67" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.2.1.tar.gz", "has_sig": false, "md5_digest": "38578007329d5d8154f2e8fd0d1918ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10610, "upload_time": "2014-04-02T12:11:19", "url": "https://files.pythonhosted.org/packages/ad/3c/e9d980c499ba4f3bc9467b3440ff6a6770829662b51c3e7fbcf9d7e7ad67/djangorestframework-fine-permissions-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "ddf7ff57911f89476cf8efd6548aca4a", "sha256": "9b07c4590f7974b48969782e1a3fee5f09d39d9b97a7f78bb9aef85209facc50" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ddf7ff57911f89476cf8efd6548aca4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10771, "upload_time": "2014-06-05T12:00:29", "url": "https://files.pythonhosted.org/packages/3e/b2/3a7a5b91285c3c0452d0e598a65b8aeba7a707f28aa390c0b7ae667f8a52/djangorestframework-fine-permissions-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "0f857635cd5c21f10fc7bdcabfe7354f", "sha256": "72f282665fc1a530e09ededf78051083f6239dafe24ff8ea54c92f82feec0d58" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.2.3.tar.gz", "has_sig": false, "md5_digest": "0f857635cd5c21f10fc7bdcabfe7354f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10730, "upload_time": "2014-06-30T14:48:47", "url": "https://files.pythonhosted.org/packages/23/33/1f8dc83faf11595eb6c3f195c7e899cdf0aa786e65ddb587e26874fa82f6/djangorestframework-fine-permissions-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "81d3fd73e043cb08c5bafd851e0d18b5", "sha256": "6bea020cde2f31379f3158a13e74e610673e97a3eb2114eb293c0ec451b7e397" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.3.0.tar.gz", "has_sig": false, "md5_digest": "81d3fd73e043cb08c5bafd851e0d18b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10988, "upload_time": "2014-07-11T09:12:25", "url": "https://files.pythonhosted.org/packages/1c/f1/7df302e1d8bb453cd61a6dd025ffa844afe94be944e3755469ad01a5e12f/djangorestframework-fine-permissions-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "315787103b337fd6f886d102f6c94024", "sha256": "4de31054e918d7bf2cc6e747c086524d14aa10c35100fdd32e741dcfef0d9e23" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.3.1.tar.gz", "has_sig": false, "md5_digest": "315787103b337fd6f886d102f6c94024", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10921, "upload_time": "2014-08-29T08:03:47", "url": "https://files.pythonhosted.org/packages/c6/35/f681982c27d97f7c1366e95b17b2a4a8fcc5c1d1422b0c24ddd3e637fb8b/djangorestframework-fine-permissions-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "72977653781ea9187c20a9bd405572b1", "sha256": "7eae41f0b8a0904aaa5d73b48e382e251f820fd3d8172455982310bc0ba79ba7" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.3.2.tar.gz", "has_sig": false, "md5_digest": "72977653781ea9187c20a9bd405572b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11021, "upload_time": "2014-09-11T12:08:31", "url": "https://files.pythonhosted.org/packages/24/99/c12b17c0b09a86061e75601fcb85eefe51e3ba2e335c37cb4d1eeb7c7408/djangorestframework-fine-permissions-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "89873e79ab5da34002d6bc15b6c1795d", "sha256": "aa7cc41a44f759f30c7fdde55f29fd4f30afb872ba11d6a9ae7a68d262914a41" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.3.3.tar.gz", "has_sig": false, "md5_digest": "89873e79ab5da34002d6bc15b6c1795d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11173, "upload_time": "2014-10-01T13:41:59", "url": "https://files.pythonhosted.org/packages/bf/6e/6c973306c7ffa58598906a0718aa146295d4fd93dd94cd827ed3c2f90da2/djangorestframework-fine-permissions-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "f6c400bb0bf41178d636c8166cf97891", "sha256": "0c90d1d059158b91d8a8694562bc50888d1e56b37e6ac1c3a17ed5016c47e26b" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.3.4.tar.gz", "has_sig": false, "md5_digest": "f6c400bb0bf41178d636c8166cf97891", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11192, "upload_time": "2014-10-22T14:59:23", "url": "https://files.pythonhosted.org/packages/7e/7d/6f7acf12170a1ec8aec72ea7dc6cbf18c33801ba9789cb0ab02153446fbe/djangorestframework-fine-permissions-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "6984500416780e2f916a93eb88003228", "sha256": "f2f53ec57153a76feeffc852baff1359154205ecb741b16b27dfd93e4c2153b0" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6984500416780e2f916a93eb88003228", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15473, "upload_time": "2014-12-23T11:34:15", "url": "https://files.pythonhosted.org/packages/dc/1f/7e945268c7ffbea298deecd4dce974911fc4fa64931ec8b79c1df1914037/djangorestframework-fine-permissions-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "27afda4f7cc6b6b8856f86653e78cd98", "sha256": "4a7afd9e64e94dea9d4679fe8eeed4bc2891c7bfe18c00f5803abe7c42d767d1" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.5.0.tar.gz", "has_sig": false, "md5_digest": "27afda4f7cc6b6b8856f86653e78cd98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20329, "upload_time": "2015-01-20T13:21:44", "url": "https://files.pythonhosted.org/packages/79/d5/1147c3961ca6dc8b8464e0230a667dd627ffbaa091c3f97b83c348326ece/djangorestframework-fine-permissions-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "456958e1204776d2ca27c0d2a17130c6", "sha256": "193ecab0302843dae0631da771d047b7fed3863b278d3c54c1c79992f7d8865f" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.5.1.tar.gz", "has_sig": false, "md5_digest": "456958e1204776d2ca27c0d2a17130c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20946, "upload_time": "2015-05-07T09:53:35", "url": "https://files.pythonhosted.org/packages/00/8b/95206449a7f90a992f87d554666eeb955109aae66c8fd19ed90430ac04b6/djangorestframework-fine-permissions-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "a88e14de459334246934e445b36037bd", "sha256": "424b75a7baec4d4e26799b751aa520762bd625d46dccd03805bd8640b212ed68" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.5.2.tar.gz", "has_sig": false, "md5_digest": "a88e14de459334246934e445b36037bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20807, "upload_time": "2015-08-27T09:39:44", "url": "https://files.pythonhosted.org/packages/79/54/61b334edffce5e9684893df5c8f7a8674c82dc34491059e4cd0540f13131/djangorestframework-fine-permissions-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "98299f386165282f0eae6016170b1537", "sha256": "dc16349d6ddb95c58eb15940c2bd7550847078b19eb0ff9b6d8ba5fc358e52f6" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.6.0.tar.gz", "has_sig": false, "md5_digest": "98299f386165282f0eae6016170b1537", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22606, "upload_time": "2016-01-18T10:20:24", "url": "https://files.pythonhosted.org/packages/78/97/8549f36f7df07368bed16b7f266da3b7b0c9d922f7f3a39e66a24b956882/djangorestframework-fine-permissions-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "76bb667be8d7b5a6e6d6c9f8a41e6705", "sha256": "858fb997673f21b169d4f9715795b292bb32cd32fc50505386ebf1e17b4f8f08" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.6.1.tar.gz", "has_sig": false, "md5_digest": "76bb667be8d7b5a6e6d6c9f8a41e6705", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 100929, "upload_time": "2017-01-25T09:38:55", "url": "https://files.pythonhosted.org/packages/b6/0c/800df52f793c4f241fc91599015f95fa5f6f9307a1d150f68e0b09ffc8d6/djangorestframework-fine-permissions-0.6.1.tar.gz" } ], "0.6.2": [], "0.6.3": [ { "comment_text": "", "digests": { "md5": "e50f421576122e9dc23124bc38955ad3", "sha256": "5f0119c3458cdd9f79751bb7bf4c4a97bec9157aa2635b62692cb90b043ada99" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.6.3.tar.gz", "has_sig": false, "md5_digest": "e50f421576122e9dc23124bc38955ad3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101648, "upload_time": "2017-01-27T14:42:09", "url": "https://files.pythonhosted.org/packages/54/34/552b95682578d3528555cf2e6fbec7f026337cf41b4edfcfb15346d32891/djangorestframework-fine-permissions-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "250de2042eaf9086b51e538537f1a7dd", "sha256": "86b31affa9e8a5646926ece8faea7b368eabecacd7a4074a3d6701c5cbf80176" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.6.4.tar.gz", "has_sig": false, "md5_digest": "250de2042eaf9086b51e538537f1a7dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102243, "upload_time": "2018-02-09T21:13:55", "url": "https://files.pythonhosted.org/packages/5d/eb/ebdab5a2f51a21f05412e67da7218a09d670081fcfd5f07e5f426c74c5a7/djangorestframework-fine-permissions-0.6.4.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "76d2d0a1c6961bf27d13ec602e1dad9c", "sha256": "25c7a4956183a0a7343ade0fcf759bfa6a21a8bd371af511df1d18033cb70f15" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.7.0.tar.gz", "has_sig": false, "md5_digest": "76d2d0a1c6961bf27d13ec602e1dad9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106752, "upload_time": "2018-07-14T09:37:49", "url": "https://files.pythonhosted.org/packages/32/ef/0f4f1a8432c2cfe52bd84562a54890dc4c00be1554110de2670c97c11847/djangorestframework-fine-permissions-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76d2d0a1c6961bf27d13ec602e1dad9c", "sha256": "25c7a4956183a0a7343ade0fcf759bfa6a21a8bd371af511df1d18033cb70f15" }, "downloads": -1, "filename": "djangorestframework-fine-permissions-0.7.0.tar.gz", "has_sig": false, "md5_digest": "76d2d0a1c6961bf27d13ec602e1dad9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106752, "upload_time": "2018-07-14T09:37:49", "url": "https://files.pythonhosted.org/packages/32/ef/0f4f1a8432c2cfe52bd84562a54890dc4c00be1554110de2670c97c11847/djangorestframework-fine-permissions-0.7.0.tar.gz" } ] }