Django разграничение доступа

Я занимаюсь изучением Django. И хочу разработать CRM для онлайн школы. Для нее требуется 4 вида аккаунтов: ученик, преподаватель, администратор школы, владелец школы. Ни как не могу определиться какой вариант разграничения доступа будет правильным. На данный момент планирую сделать так:

Создать 5 приложений:

  1. teacher_account - преподаватель
  2. student_account - ученик
  3. administrator_account - администратор школы
  4. boss_account - аккаунт владельца
  5. accounts - для авторизации

И в моделях создать по одному аккаунту: teacher_account/models.py

from django.contrib.auth.models import User
class Teacher(models.Model):
    account = models.ForeignKey(User, on_delete=models.PROTECT,
                                related_name='teacher')
    ...
    class Meta:
        db_table = 'account_teachers'
        permissions = [("can_do_teacher_work", 'can do teacher work')]

student_account/models.py

from django.contrib.auth.models import User
class Student(models.Model):
    account = models.ForeignKey(User, on_delete=models.PROTECT,
                                related_name='student')
    ...
    class Meta:
        db_table = 'account_students'
        permissions = [("can_do_student_work", 'can do student work')]

И по аналогии 2 других аккаунта.

Затем создать 4 группы и привязать к ним permissions каждого аккаунта, через Django Admin.

И в контроллерах каждого приложения создавать классы которые наследуются от LoginRequiredMixin и PermissionRequiredMixin контроллировать доступ к страницам.

Правильный ли способ я выбрал? Не говнокод ли получится?


Ответы (2 шт):

Автор решения: Anton Balmakov

Лучше создать одну модель AdvUser. Унаследовать от User(если нужны какие нибудь доп поля). А после создать группы в которых раздать разрешения на те или иные действия. И в админке будешь ставить галочки на юзера. Будет это админ или студент и т.д

→ Ссылка
Автор решения: onlikerop

Зачем вообще делать столько моделей пользователей, если всё это можно решить простым созданием 4 групп пользователей? В приложении же для каждой конкретной задачи прописать требуемые права, и эти права раздать по группам: Студент, Преподаватель, Администратор, Владелец. Доступ к страницам также можно контролировать правами, скажем: student_basic, teacher_basic, etc.

→ Ссылка