Django Permissions

Как можно сделать модель доступной по умолчанию, для пользователей (staff=True)? А именно сделать доступными CRUD действия в админ панели?

Я на основе базовой аутентификации джанго создал свою:

from django.db import models
from django.contrib.auth.models import AbstractUser
from .manager import CustomUserManager
from django.urls import reverse
from pytils.translit import slugify



class CustomUser(AbstractUser):
    username = None  # removing username field
    email = models.EmailField(unique=True)
    is_staff = models.BooleanField(default=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()



class _TimedModel(models.Model):

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta(object):
        abstract = True


class Post(_TimedModel):
    title = models.CharField(max_length=100)
    body = models.TextField()
    slug = models.SlugField(null=False, unique=True)
    author = models.ForeignKey('blog.CustomUser', on_delete=models.CASCADE, related_name="post")


    objects = models.Manager()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Post, self).save(*args, **kwargs)

    class Meta(object):
        verbose_name = 'Post'
        verbose_name_plural = 'Post'


    def str(self):
        return self.title


    def get_absolute_url(self):
        return reverse('post_detail', kwargs={'slug': self.slug})

Затем создал регистрацию пользователя, добавила в админ панель модель Post.

Это соответственно файл admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser, Post


class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ('email', 'is_staff', 'is_active',)
    list_filter = ('email', 'is_staff', 'is_active',)
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('is_staff', 'is_active')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )
    search_fields = ('email',)
    ordering = ('email',)


admin.site.register(CustomUser, CustomUserAdmin)



class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'body',)
    prepopulated_fields = {'slug': ('title',)}

admin.site.register(Post, PostAdmin)

А это файл managers.py

from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import Permission


class CustomUserManager(BaseUserManager):
    def create_user(self, email: str, password, **extra_fields):
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        extra_fields.setdefault('is_staff', True)
        permission = Permission.objects.get(name='Can add Post')
        user.user_permissions.add(permission)
        # user.user_permissions.add(Permission.objects.get(codename="add_post"))
        user.save()
        return user

    def create_superuser(self, email: str, password, **extra_fields) :
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')
        return self.create_user(email, password, **extra_fields)

Админка для суперюзера отображается, и также отображаются доступные действия с ней.

Но для обычных пользователей отображается это:

You don’t have permission to view or edit anything.

Подскажите пожалуйста, что я делаю не так? Создать группу руками в админ панели и присвоить её юзеру пожалуйста не предлагать, решение должно быть автоматизированным.


Ответы (0 шт):