Суперпользователю Django не разрешено редактировать эту модель

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

По сути, это приложение о вакансиях для нашей компании. Вот мои модели:

  • Статус
  • Департамент
  • Местонахождение
  • Contactperson
  • Вакансия
  • Заявитель

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

class DepartmentAdminForm(ModelForm):
    prepopulated_fields = {'slug': ('name',)}
    readonly_fields = ['banner_image', 'button_background_image_location']

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        self.obj = kwargs.pop('obj', None)
        super(DepartmentAdminForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super().clean()
        if self.instance.pk is None:  # add
            return cleaned_data

        cleaned_data = super().clean()
        user = self.request.user
        is_authorized = department_role_check(self.obj, user)

        if is_authorized:
            return cleaned_data
        else:
            raise forms.ValidationError('You are not allowed to edit this department.')

    class Meta:
        model = Department
        fields = [
            'name',
            'summary',
            'slug',
            'button_short_text',
            'position',
        ]

        verbose_name = 'Departments'

Это довольно стандартная форма AdminForm. И она прекрасно работает на производстве. Я не вносил никаких изменений в репозиторий до этого момента, которые могли бы сделать код другим на продакшене. Еще одна очень странная вещь: когда я отзываю у пользователя статус суперпользователя и даю ему все разрешения, все записи об отделах исчезают и остаются видимыми только 2 из 11 вакансий... чего не должно быть, верно?

Я в полной растерянности... Надеюсь, кто-нибудь сможет пролить свет на это.

EDIT: вот где происходит проверка роли, в guards.py в той же карте, где находится settings

def department_role_check(department, user):
    permission = 'departments.department_' + str(department.id)

    return permission in user.get_group_permissions()

def department_vacancy_role_check(department, user):
    permission = 'vacancies.vacancy_department_' + str(department.id)

    return permission in user.get_group_permissions()

def vacancy_role_check(vacancy, user):
    permission = 'vacancies.vacancy_department_' + str(vacancy.department.id)

    return permission in user.get_group_permissions()

def vacancy_applicant_role_check(applicant, user):
    try:
        permission = 'vacancies.vacancy_department_' + str(applicant.vacancy.department.id)
        return permission in user.get_group_permissions()

    except Exception:
        return False

Кроме того, пользователю разрешено создавать новые отделы и вакансии (если они относятся к новым отделам) и редактировать их, что не имеет смысла для меня

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