Как добавить права в админпанель django для пользователя?

У меня есть приложение django. И я добавил в административной панели django следующее разрешение:

Accounts | account | Can view account

А в коде файла admin.py приложения учетных записей. Я добавил следующее:

from django.contrib.auth import get_user_model
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

from .models import Account
# from .models import *

# Register your models here.
User = get_user_model()

user = User.objects.get(email='n@n.nl')
print(user.has_perm('view_account'))
content_type = ContentType.objects.get_for_model(Account)
permission = Permission.objects.get(
    codename='view_account', content_type=content_type)
user.user_permissions.add(permission)

permissions = Permission.objects.filter(content_type=content_type)

for perm in permissions:
    print(f"Codename: {perm.codename}, Name: {perm.name}")
print(user)


class AccountAdmin(UserAdmin):
    list_display = (
        "email",
        "first_name",
        "last_name",
        "username",
        "last_login",
        "date_joined",
        "is_active",
    )
    list_display_links = ("email", "first_name", "last_name")
    filter_horizontal = (
        'groups',
        'user_permissions',
    )

    readonly_fields = ("last_login", "date_joined")
    ordering = ("-date_joined",)

    list_filter = ()

    User = get_user_model()
    user = User.objects.get(email='n@n.nl')
    content_type = ContentType.objects.get_for_model(Account)
    permission = Permission.objects.get(
        codename='view_account', content_type=content_type)
    user.user_permissions.add(permission)


admin.site.register(Account, AccountAdmin)

А когда я запускаю приложение django. я не получаю никаких ошибок.

Но когда я вхожу в систему с учетной записью с правами пользователя. Я все еще вижу сообщение:

У вас нет прав на просмотр или редактирование чего-либо.

А разрешения:

  • Является активным
  • Является персоналом выбран

Вопрос: как добавить права для пользователей?

Вам не предоставлена Account модель, но я могу представить себе проблему:

Например, у вас есть приложение с именем accounts: И вы хотите просто переопределить некоторые функции из User, но не хотите менять модель User. У вас есть:

#accounts.models
from django.contrib.auth import get_user_model


# Register your models here.
User = get_user_model()

class Account(User):

    class Meta:
        proxy = True
        verbose_name = "Account"

     def __str__(self):
        return f'I override str {self}'

После этого вы создаете администратора:

#accounts.admin
from django.contrib import admin
from .models import Account

class AccountAdmin(admin.ModelAdmin):
    ...
    pass

admin.site.register(Account, AccountAdmin)

После этого вы добавляете разрешение пользователю:

user, __ = Account.objects.get_or_create(email='n@n.nl', is_staff=True, is_active=True)
content_type = ContentType.objects.get_for_model(Account)
permission = Permission.objects.get(codename='view_account', content_type=content_type)
user.user_permissions.add(permission)

Но если вы увидите на content_type.app_label, то получите 'auth'. И AccountAdmin.options.app_label -> 'accounts'

Проблема заключается в различных моделях app_label и proxy.

Чтобы увидеть AccountAdmin, вы должны сделать:

ct = ContentType.objects.get_or_create(app_label="accounts", model='account')
perm = Permission.objects.get_or_create(codename='view_account', content_type=content_type)
user.user_permissions.add(perm)

Надеюсь, это поможет.

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