Показать статистику
0 голосов
от (2.7тыс. баллов)

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

from django.contrib.auth.models import AbstractUser

# Create your models here.

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

Его бэкэнд:

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()

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

250 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Перейдите в оболочку Django:

python manage.py shell

Следующий,

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

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

...