@kyklaed

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

Привет, подскажите . как добавить новое разрешение?
сейчас у меня есть activ, staff, admin, я хочу сюда добавить еще moderator
как правильно это сделать ?
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 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
Похожие вопросы