42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
from django.contrib.auth.models import Group, Permission
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from user.models import User
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = """
|
|
Programatically set application permissions and groups\n
|
|
usage: python manage.py create_groups_and_permissions.py
|
|
"""
|
|
|
|
def handle(self, *args, **options):
|
|
# get or create groups
|
|
admin_group, created = Group.objects.get_or_create(name='Admin')
|
|
operater_group, created = Group.objects.get_or_create(name='Operater')
|
|
viewer_group, created = Group.objects.get_or_create(name='Viewer')
|
|
|
|
# define content types
|
|
ct_user = ContentType.objects.get_for_model(User)
|
|
|
|
# define permissions
|
|
application_permissions = [
|
|
# (codename, name, content_type, list_of_groups_to_assign_perm)
|
|
|
|
('add_user', 'Can add new users', ct_user, [admin_group]),
|
|
('change_user', 'Can change existing user', ct_user, [admin_group]),
|
|
('delete_user', 'Can delete existing user', ct_user, [admin_group]),
|
|
('add_data', 'Can add new data', ct_user, [admin_group, operater_group]),
|
|
]
|
|
|
|
# get or create permissions and add them to appropriate groups
|
|
for permission_tuple in application_permissions:
|
|
permission_obj, created = Permission.objects.get_or_create(
|
|
codename=permission_tuple[0],
|
|
name=permission_tuple[1],
|
|
content_type=permission_tuple[2]
|
|
)
|
|
|
|
for group in permission_tuple[3]:
|
|
group.permissions.add(permission_obj) |