Суперпользователю 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
Кроме того, пользователю разрешено создавать новые отделы и вакансии (если они относятся к новым отделам) и редактировать их, что не имеет смысла для меня