Я работаю со следующими моделями в проекте Django.Эффективные отношения состоят в том, что в округе может быть несколько школ, в школе может быть несколько учеников, а у ученика может быть несколько дел.
class District(models.Model):
name = models.CharField(max_length=50)
...
class Meta:
permissions = (
('view_district', 'Can view district')
...
)
class School(models.Model):
name = models.CharField(max_length=50)
...
district = models.ForeignKey(
District,
on_delete=models.PROTECT,
related_name='schools',
related_query_name='school',
)
class Meta:
permissions = (
('view_school', 'Can view school')
...
)
class Student(models.Model):
name = models.CharField(max_length=50)
...
school = models.ForeignKey(
School,
on_delete=models.PROTECT,
related_name='students',
related_query_name='student',
)
class Meta:
permissions = (
('view_student', 'Can view student')
...
)
class Case(models.Model):
name = models.CharField(max_length=50)
...
student = models.ForeignKey(
Student,
on_delete=models.PROTECT
related_name='cases',
related_query_name='case',
)
class Meta:
permissions = (
('view_case', 'Can view case')
...
)
Пользователю может быть назначено:
- конкретный случай
- конкретный студент (который будет включать все случаи для этого студента)
- конкретная школа (которая будет включать всех учеников этой школы и, следовательно, все случаи для учеников этой школы)
- конкретный округ (который будет включать все школы для этого округа, все учащиеся, которые посещают эти школы)школы в этом округе, и все дела для учащихся, которые посещают эти школы в этом округе)
Пользователи (кроме администраторов) смогут только просматривать / редактировать / удалять модели, для которых им предоставленыразрешения.Администраторы будут иметь прежние разрешения для всех моделей, а также добавлять новые модели.В конечном итоге администраторы «назначат», кому и к чему иметь доступ, группы казались естественным способом расширить некоторые из этих функций.
Мне известно, что django не предоставляет встроенной поддержки разрешений на уровне экземпляра, и поэтому я уже исследовал пакет django-guardian.Похоже, что он предлагает функциональность, необходимую для конкретного экземпляра, и хотя я могу создавать разрешения для объектов по отдельности через оболочку, я, очевидно, хочу встроить эту функциональность в модели.
В идеале, когда создается модель,будет доступна группа (или разрешение?), в которую могут быть помещены пользователи, такие как
District | District1 | can view District1
District | District1 | can edit District1
District | District1 | can delete District1
....
School | School1 | can view School1
School | School1 | can edit School1
School | School1 | can delete School1
Я думаю, что программное создание групп для каждого разрешения объекта было бы идеальным?Но тогда мне нужно будет удалить эти группы, если модель будет удалена?Я также чувствую, что группы могут слишком усложнять систему и скорее полагаться на программно сгенерированные разрешения и прямо избегать групп?Я действительно ищу какое-то направление, так как мне никогда не нужно было создавать такую уникальную схему разрешений.Любой совет очень ценится.