Add user roles to django-auth
Project description
Add roles to django-auth
Role are set of group of permissions and permissions. It’s fully customizable. Everything is in database.
Admin application allow to manage roles.
Installation
pip install django-auth-role
Quick start
Add authrole to INSTALLED_APPS (django.contrib.auth and django.contrib.contenttypes are also required) and AuthRoleBackend to AUTHENTICATION_BACKENDS.
INSTALLED_APPS = [
...
'django.contrib.contenttypes',
'django.contrib.auth',
'authrole',
]
AUTHENTICATION_BACKENDS = (
'authrole.auth.backends.AuthRoleBackend',
)
Extend auth.User.
from authrole.mixins import RoleMixin
from django.db import models
class MyUser(RoleMixin, models.Model):
user = models.OneToOneField('auth.User', related_name='user')
or create new auth user model:
from authrole.mixins import RoleMixin
from django.contrib.auth.models import AbstractUser
from django.db import models
class MyUser(RoleMixin, AbstractUser):
pass
In this case remember to set AUTH_USER_MODEL to Your model.
Create tables.
./manage.py migrate
Advanced usage
Own authentication backend
If You need Your own authentication backend, simply extend BaseAuthRoleBackend. fetch_role_permissions function must return a list of auth.Permission objects:
from authrole.auth.backends import BaseAuthRoleBackend
from django.contrib.auth.models import Permission
class MyBackend(BaseAuthRoleBackend):
def fetch_role_permissions(self, user_obj):
if user_obj.username == 'admin':
return Permission.objects.all()
else:
return Permission.objects.none()
Extend role
Add OneToOneField to Your model:
from django.db import models
class MyRole(models.Model):
role = models.OneToOneField('authrole.Role', null=False, blank=False, related_name='myrole')
extra_field = models.CharField(max_length=10)
And use:
from authrole.models import Role
role = Role.objects.all()[0]
print(role.myrole.extra_field)
Or write Your own role class based on AbstractRole (Django >= 1.5):
from authrole.model import AbstractRole
class MyRole(AbstractRole):
extra_field = models.CharField(max_length=10)
Point AUTHROLE_ROLE_MODEL to Your new model:
AUTHROLE_ROLE_MODEL = 'app.MyRole'
And use:
from app.models import MyRole
role = MyRole.objects.all()[0]
print(role.extra_field)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_auth_role-0.4.0-py2.py3-none-any.whl
.
File metadata
- Download URL: django_auth_role-0.4.0-py2.py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ba022ae540891bd987679d759bb55343f8416c277f5d59646dfef3a572661cc |
|
MD5 | cb9c299d6cbd2a923eaf2c376b4853b9 |
|
BLAKE2b-256 | cd6611677a005d2828f20a5affc8604791cf61ca980d544db370975d1ef08ec3 |