Здравствуйте, мне необходимо сделать приложение для управления задачами,
в этом приложении задачи будут разделены на проекты, в каждом проекте будут доступные статусы. В зависимости от проекта,текущего статуса и принадлежности к группе(или пользователю) будут доступны (чтение,запись,удаление,смена статуса не некоторые доступные статусы связанные с этим проектом)
Основную сложность вызывают права, не знаю сделать это моделью или использовать что нибудь для row level acl типо (django-guardian)
Вот что пока получилось с моделями, подскажите и посоветуйте пожалуйста
https://gist.github.com/0xdeface/1e720780c68ad60df88fdf1139ea615a
П.С как в админке в модели task возаращать статусы только связанные с Project?
from django.db import models
from django.utils.timezone import now
from django.contrib.auth.models import User, Group
# Create your models here.
class Project(models.Model):
name = models.CharField(max_length=255, verbose_name="название проекта")
purpose = models.CharField(max_length=255, verbose_name="цель")
class Task(models.Model):
name = models.CharField(max_length=255, verbose_name="название")
deadline = models.DateField(default=now())
text = models.TextField(verbose_name="описание")
status = models.ForeignKey('ProjectStatus', related_name='tasks')
author = models.ForeignKey(User)
perfomer = models.ForeignKey(User)
class TaskFile(models.Model):
file = models.FileField(upload_to='tasks')
task = models.ForeignKey(Task, related_name='files')
class ProjectStatus(models.Model):
status = models.CharField(verbose_name="статус", max_length=150)
project = models.ForeignKey(Project, related_name='statuses')
actions = (
('r', 'can read'),
('w', 'can change'),
('d', 'can delete'),
)
class Rule(models.Model):
project = models.ForeignKey(Project)
user = models.ForeignKey(User)
group = models.ForeignKey(Group)
current = models.ForeignKey(ProjectStatus) # if null
new = models.ForeignKey(ProjectStatus) # create new
can_delete = models.BooleanField(default=False, verbose_name="можно удалять")
can_read = models.BooleanField(default=False, verbose_name="можно читать")
can_write= models.BooleanField(default=False, verbose_name="можно изменять")
# rule (1,2,2,None,In work,
def get_rules():
def perm(project_id, user, group, status=None):
return {'statues': (1, 2, 3), 'read': True, 'change': True, 'delete': False}