Разганичение прав доступа на уровне модели в административной панели Django
Вопрос касается только работы в административной панели Django:
Имеются 2 модели Departments (отделы) и Employees (сотрудники)
class Departments(models.Model):
title = models.CharField()
class Employees(models.Model):
name = models.CharField()
fk_departments = models.ForeignKey(Departments)
Например, имеются несколько отделов: "Отдел № 1" и "Отдел № 2", в первом работает Иванов, во втором Петров. Если создать пользователя при помощи административной панели Django и дать ему все права на модель Employees (сотрудники) то пользователь по-умолчанию будет видеть полный список сотрудников из всех отделов:
- имя: "Иванов", отдел: "Отдел № 1"
- имя: "Петров", отдел: "Отдел № 2"
Есть ли возможность изменить права пользователя на уровне разграничения прав по отделам в административной панели Django? (т.е. разные пользователи должны видеть сотрудников только из определенных отделов).
Например, в списке сотрудников Пользователь № 1 будет видеть только "Иванова" из "Отдела № 1"
Возможно решение "костыльное", но я решил проблему, добавив в модуле приложения admin.py следующее:
class EmployeesAdmin(admin.ModelAdmin):
.... списки отображаемых полей....
def get_queryset(self, request):
qs = super(EmployeesAdmin, self).get_queryset(request)
# Если текущий пользователь суперюзер возвращаем всё:
if request.user.is_superuser:
return qs
# Если текущий пользователь принадлежит к группе "Отдел № 1" возвращаем Сотрудников только из "Отдел № 1":
if request.user.groups.filter(name='Отдел № 1').exists():
return qs.filter(fk_departments=1)
# Если текущий пользователь принадлежит к группе "Отдел № 2" возвращаем Сотрудников только из "Отдел № 2":
if request.user.groups.filter(name='Отдел № 2').exists():
return qs.filter(fk_departments=2)