Skip to main content
=====
Protector
=====
.. image:: https://img.shields.io/coveralls/grey0ne/django-protector.svg
:target: https://coveralls.io/r/grey0ne/django-protector?branch=master

.. image:: https://img.shields.io/travis/grey0ne/django-protector/master.svg
:target: https://travis-ci.org/grey0ne/django-protector

Protector is used for managing object level permissions in performance efficient way.
It supports queryset filtering by permission and user.
Also it allows every object in your project to behave as a user group. i.e. adding permissions and users with roles.

Quick start
-----------

1. Install from pip (it will also install required django-mptt)::

pip install django-protector

2. Add "protector" to your INSTALLED_APPS setting::

INSTALLED_APPS = (
...
'protector',
)

3. Replace default auth backend with Protector backend::

AUTHENTICATION_BACKENDS = (
...
'protector.backends.GenericPermissionBackend'
)

4. Make some model your default group::

PROTECTOR_GENERIC_GROUP = 'users.group'

5. Run `python manage.py migrate` to create the protector models and copy existing user permissions

Now you can check permissions on objects like this::

user.has_perm('some_app.some_perm', user)

Or filter any queryset by permission::

from protector.models import filter_queryset_by_permission
filtered_qset = filter_queryset_by_permission(some_qset, user, 'some_app.some_perm')

Additional steps
----------------

1. Add GenericPermsMixin to your User model to conviniently add permissions and groups::

class User(UserGenericPermsMixin, AbstractBaseUser)

2. Create some group models. Every model in your project could now behave like a group. You could inherit your models from abstract group to have convinient fields for users and permissions::

class Group(AbstractGenericGroup):

4. Inherit your Querysets from PermissionQuerySet to filter by permission easily::

some_qset.filter_by_permission(user, 'some_app.some_perm')

Now you can manipulate permissions and groups::

user.permissions.all()
user.permissions.add(permission)
user.groups.all()
group.permissions.add(permission)


Restricting access to objects
-----------------------------

This is somewhat different from just filtering queryset by permission

1. Inherit your model from Restricted::

class Comment(Restricted)

2. Inherit model manager from RestrictedManager::

class CommentManager(RestrictedManager):

3. Restricted contains some additional fields so you need to run makemigration for your app

4. Now you can restrict instances of your model::

comment.restrict()

To enable user view one or all restricted objects::

user.permissions.add(Restricted.get_view_permission(), comment)
user.permissions.add(Restricted.get_view_permission())

To filter model objects visible by user::

Comment.objects.visible(user)


Global Permissions
-----------------------------

You could define Template-like permissions. For example you want all group moderators to have edit_permission on their group.
Such templates could be created In Global Group Permissions admin interface. You should choose ContentType of your group, roles and, of course, permission those roles should have.
No further actions required::

user.has_perm('someapp.edit_permission', somegroup)

would return true if user is moderator in somegroup


Permission on Foreign Key to User
------------------------------

Every so often you would like owners of your objects to have some permissions of their objects.
Easy peasy.
You should inherit you object, for example TestPost from AbstractGenericGroup
Like so::

class TestPost(AbstractGenericGroup):
SUBSCRIBER = 1
AUTHOR = 2
ROLES = (
(SUBSCRIBER, 'Subscriber'),
(AUTHOR, 'Author')
)
author = models.ForeignKey(to=TestUser)

MEMBER_FOREIGN_KEY_FIELDS = (
('author', AUTHOR),
)

class Meta:
permissions = (
('manage_post', 'Manage Post'),
)


MEMBER_FOREIGN_KEY_FIELDS defines which foreign key gets which role.

Notice: This is accomplished via some denormalization and works through create, save and update model and manager methods overloading

Release files for django-protector 0.4.16

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-protector 0.4.16
File Size Uploaded
django-protector-0.4.16.tar.gz 28.0 kB Details

Release files / django-protector-0.4.16.tar.gz

Download URL django-protector-0.4.16.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a14a5932455557dbbf484c14711aa3888e75369e9d9b4e5e5f2d64120b5ecf3a
BLAKE2b-256 checksum
How to use checksums
af0d3074ae2f4984a5a535d51a40e76ad395a989261d2b0d6c285f97bccd7b29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.6.17

1 release file

0.6.16

1 release file

0.6.15

1 release file

0.6.14

1 release file

0.6.12

1 release file

0.6.11

1 release file

0.6.10

1 release file

0.6.8

1 release file

0.6.7

1 release file

0.6.6

1 release file

0.6.5

1 release file

0.6.2

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.5.8

1 release file

0.5.7

1 release file

0.5.6

1 release file

0.5.5

1 release file

0.5.4

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.4.31

1 release file

0.4.30

1 release file

0.4.24

1 release file

0.4.23

1 release file

0.4.21

1 release file

0.4.20

1 release file

0.4.19

1 release file

0.4.18

1 release file

0.4.17

1 release file

This release

0.4.16 This release

1 release file

0.4.15

1 release file

0.4.14

1 release file

0.4.13

1 release file

0.4.12

1 release file

0.4.11

1 release file

0.4.9

1 release file

0.4.8

1 release file

0.4.7

1 release file

0.4.6

1 release file

0.4.5

1 release file

0.4.4

1 release file

0.4.3

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.3.13

1 release file

0.3.12

1 release file

0.3.10

1 release file

0.3.9

1 release file

0.3.8

1 release file

0.3.7

1 release file

0.3.6

1 release file

0.3.5

1 release file

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.9

1 release file

0.2.8

1 release file

0.2.7

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page