Как запретить пользователям без прав суперпользователя в Django admin выбирать все группы пользователей / разрешения? - PullRequest
0 голосов
/ 11 февраля 2020

Мне удалось отключить поля формы, но пользователь все еще может использовать Choose all для выбора всех групп или всех разрешений. Как я могу отключить / удалить Choose all для штатного пользователя?

Мне нужна эта причина, потому что я хочу, чтобы некоторые сотрудники могли изменять пользователя Personal Info, но не изменять Permissions или Important dates section.

Вот код, который я использовал до сих пор:

class UserAdmin(BaseUserAdmin):
    inlines = (AccountInline, )

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        is_superuser = request.user.is_superuser
        disabled_fields = set()  # type: Set[str]

        # Prevent non-superusers from editing their own permissions
        if not is_superuser:
            disabled_fields |= {
                'username',
                'is_staff',
                'is_superuser',
                'user_permissions',
                'groups',
                'last_login',
                'date_joined',
            }

        for f in disabled_fields:
            if f in form.base_fields:
                form.base_fields[f].disabled = True

        return form

1 Ответ

1 голос
/ 12 февраля 2020

Вы пытались переопределить get_fieldsets в вашем UserAdmin? Что-то вроде

class UserAdmin(BaseUserAdmin):
....
def get_fieldsets(self, request, obj=None):
    if not request.user.is_superuser:
        return [(None, {'fields': ('your_editable_fields',)}),]
    else:
        return self.fieldsets

Немного модифицированный, это позволило мне оставить только определенные поля для суперпользовательской формы.

...