Django разграничение доступа
Я занимаюсь изучением Django. И хочу разработать CRM для онлайн школы. Для нее требуется 4 вида аккаунтов: ученик, преподаватель, администратор школы, владелец школы. Ни как не могу определиться какой вариант разграничения доступа будет правильным. На данный момент планирую сделать так:
Создать 5 приложений:
- teacher_account - преподаватель
- student_account - ученик
- administrator_account - администратор школы
- boss_account - аккаунт владельца
- 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 шт):
Лучше создать одну модель AdvUser. Унаследовать от User(если нужны какие нибудь доп поля). А после создать группы в которых раздать разрешения на те или иные действия. И в админке будешь ставить галочки на юзера. Будет это админ или студент и т.д
Зачем вообще делать столько моделей пользователей, если всё это можно решить простым созданием 4 групп пользователей? В приложении же для каждой конкретной задачи прописать требуемые права, и эти права раздать по группам: Студент, Преподаватель, Администратор, Владелец. Доступ к страницам также можно контролировать правами, скажем: student_basic, teacher_basic, etc.