Django: запретить штатному пользователю предоставлять группе больше разрешений, чем его собственным

#django

#django

Вопрос:

Я создал приложение Django, имеющее несколько типов пользователей.

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

Ниже приведены групповые разрешения для штатного пользователя. Он может добавить новую группу, но не может изменять, просматривать или удалять существующую.

введите описание изображения здесь

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

введите описание изображения здесь

Как я могу показывать только те разрешения, которые есть у самого пользователя staff, и не показывать полные параметры?

Я использую Django 2.1

Ответ №1:

Это сработало для меня: Создание групп с различными разрешениями Предотвращает добавление или удаление групп

 
    #other imports
    from django.contrib.auth.models import User
    from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

    class UserAdmin(BaseUserAdmin):
        list_display = ('username', 'email', 'is_staff')
        list_filter = ('is_staff',)
        #this displays after initial user creation for additional information
        fieldsets = (
        (None, {'fields': ('username', 'email', 'password')}),
        ('Personal info', {'fields': ('first_name',)}),
        ('Permissions', {'fields': ('is_staff', 'is_active', 'groups')}),
        )
        # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
        # overrides get_fieldsets to use this attribute when creating a user.
        add_fieldsets = (
        (None, {
        'classes': ('wide',),
        'fields': ('username', 'email', 'password1', 'password2')}
        ),
        )
        search_fields = ('username',)
        ordering = ('username',)

    #unregister the default user admin
    admin.site.unregister(User)
    # Now register the new UserAdmin...
    admin.site.register(User, UserAdmin)

  

Таким образом, пользователь не может получить дополнительные разрешения