Группы, роли и разрешения в Django

У меня вопрос: в моем проекте есть приложение для сотрудников, и я хочу, чтобы у сотрудников были разные титулы, такие как торговый представитель, менеджер и т.д., и мои представления вели себя по-разному в зависимости от титула сотрудника. Пока у меня есть модель Titles (title_code, title_name), но мне кажется, что это можно было бы сделать с помощью встроенных модулей Django. Итак, что мне использовать для построения иерархии? Группы, роли или права доступа?

Система групп, ролей и разрешений django предназначена для разрешения или запрета действий в административном канале, по этой причине эти три компонента работают вместе.

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

В первом варианте вы можете создать различные роли для каждого пользователя и разрешить некоторые права для каждого из них, но если у вас есть группы пользователей с одинаковыми правами, вы можете перегруппировать их в группу. Для более подробной информации смотрите здесь https://docs.djangoproject.com/en/4.0/topics/auth/default/#permissions-and-authorization

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

Пример

from django.db import models

class Employee(models.Model):
    SALES_MANAGER = 1
    HR_MANAGER = 2
    ENGINEERING_MANAGER = 3
  
    ROLE_CHOICES = (
      (SALES_MANAGER, 'Sales Manager'),
      (HR_MANAGER, 'HR Manager'),
      (ENGINEERING_MANAGER, 'Manager'),
    )
    employee_title = models.CharField(max_length=100, choices=ROLE_CHOICES, default='Manager')

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

from django.db import models
from django.contrib.auth.models import Group

class Employee(models.Model):
    employee_title = models.ManyToManyField(Group)

С группами вы сможете создавать новые записи без каких-либо миграций прямо из панели администратора.

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