Django: user.has_perm всегда возвращает false

У меня есть пользователь:

from django.contrib.auth.models import AbstractUser

# Create your models here.

class TaborUser(AbstractUser):
    email = models.EmailField('E-mail', unique=True)

Its backend:

from django.contrib.auth.backends import BaseBackend
from django.contrib.auth import get_user_model
from django.db.models import Q


UserModel = get_user_model()


class EmailBackend(BaseBackend):
    def get_user(self, user_id):
        user = UserModel.objects.filter(pk=user_id)
        breakpoint()
        if user:
            return user[0]
        else:
            return None

    def authenticate(self, request, username=None, password=None, **kwargs):
        user = UserModel.objects.filter(email=username)
        if not user:
            user = UserModel.objects.filter(username=username)

        # Both username and e-mail are unique. As long as we don't have
        # a very rogue admin, we should be alright.
        if user:
            user = user[0]
        else:
            return None

        if user.check_password(password):
            return user
        else:
            return None

Похоже, что модель не проходит эту проверку:

class AdminView(PermissionRequiredMixin, FormView):
    form_class = UploadFileForm

    template_name = "admin.html"
    login_url = "/login/"

    permission_required = ("taborapp.view_photomodel",
                           "taborapp.add_photomodel",
                           "taborapp.delete_photomodel", 
                        )

Когда пользователь добавляется следующим образом:

from taborapp.models import TaborUser
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

user = TaborUser.objects.create_user("test")

user.email = "test@example.me"
user.set_password("LOLaPublicPassword123")

permissions = []
photo_type = ContentType.objects.get(app_label="taborapp", model="photomodel")

for codename in "view_photomodel", "add_photomodel", "delete_photomodel":
    perm = Permission.objects.filter(content_type=photo_type, codename=codename)
    permissions.append(perm[0])

user.user_permissions.add(*permissions)

user.save()

Я делаю что-то неправильно? Я несколько раз просмотрел документацию и аналогичные вопросы на stack overflow, и я просто не могу понять проблему.

Я слишком краток, чтобы система автоматического определения поверила мне, что я достаточно описал свою проблему. Я надеюсь, что это предложение удовлетворит ее.

Зайдите в оболочку Django:

python manage.py shell

Следующий,

    from django.contrib.auth.models import User
    u = User.objects.get(email="test@example.me")
    u.get_user_permissions()

Надеемся, что в полученных данных вы увидите то, что ищете. Это даст вам хорошее представление о том, где искать дальше.

Как указал @RiverRook, получение списка разрешений было очень полезным, поскольку мне удалось найти нужную тему об этом.

Django user get_all_permissions() пуст, в то время как user_permissions установлен

Вернуться на верх