@kyklaed

Как добавить новое разрешение?

Привет, подскажите . как добавить новое разрешение?
сейчас у меня есть activ, staff, admin, я хочу сюда добавить еще moderator
как правильно это сделать ?
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
rishatsharafiev
@rishatsharafiev
React/Redux, Django
1. Создать миграцию python manage.py makemigrations --empty app_label
2. Прописать файл миграции в котором создается группа moderator и устанавливаются разрешения на эту группу. Пример ниже
# -*- coding: utf-8 -*-
# Generated by Django 1.11.9 on 2018-01-23 13:01
from __future__ import unicode_literals

from django.db import models, migrations

# mapping
add = ['add']
change = ['change']
delete = ['delete']
add_change = add + change
add_change_delete = add + change + delete

permissions = {
    'admin': {
        'auth': {
            'user': add_change,
        },
        'api': {
            'groupcompany': add_change_delete,
            'groupcompanytoken': add_change_delete,
            'company': add_change_delete,
            'companytoken': add_change_delete,
            'registration': add_change_delete,
            'historicalregistration': add_change_delete,
        },
    },
    'moderator': {
        'auth': {
            'user': change,
        },
        'api': {
            'company': change,
            'companytoken': add_change,
            'registration': add_change_delete,
            'historicalregistration': add_change,
        },
    },
}

def add_group_permissions(apps, schema_editor):
    ContentType = apps.get_model('contenttypes', 'ContentType')
    Group = apps.get_model('auth', 'Group')
    Permission = apps.get_model('auth', 'Permission')


    for group_name in permissions:
        group, created = Group.objects.get_or_create(name=group_name)
        mapping = permissions.get(group_name)
        for app_label in mapping:
            for model in mapping[app_label]:
                actions = mapping[app_label][model]
                try:
                    contenttype = ContentType.objects.get(app_label=app_label, model=model)
                    for action in actions:
                        try:
                            permission = Permission.objects.get(content_type=contenttype, codename='{action}_{model}'.format(action=action, model=model))
                            group.permissions.add(permission)
                        except Permission.DoesNotExist as e:
                            print('--> ', e)
                except ContentType.DoesNotExist as e:
                    print('--> ', e)

def remove_group_permissions(apps, schema_editor):
    Group = apps.get_model('auth', 'Group')

    for group_name in permissions:
        try:
            Group.objects.get(name=group_name).delete()
        except Group.DoesNotExist as e:
            print('--> ', e)

class Migration(migrations.Migration):

    dependencies = [
        ('contenttypes', '0002_remove_content_type_name'),
        ('api', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(add_group_permissions, remove_group_permissions),
    ]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы