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 контроллировать доступ к страницам.

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

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