first commit for v0.2

This commit is contained in:
Élie Bouttier 2014-08-30 15:38:06 -07:00
parent 6ba03afc73
commit 1463854a45
143 changed files with 20775 additions and 2764 deletions

144
permissions/models.py Normal file
View file

@ -0,0 +1,144 @@
from django.db import models
from django.db.models import Q
from django.utils.encoding import python_2_unicode_compatible
from tracker.models import Project
from accounts.models import *
__all__ = [ 'GlobalPermission', 'ProjectPermission' ]
@python_2_unicode_compatible
class PermissionModel(models.Model):
GRANTEE_USER = 0
GRANTEE_GROUP = 1
GRANTEE_TEAM = 2
GRANTEE_TYPE = (
(GRANTEE_USER, 'User'),
(GRANTEE_GROUP, 'Group'),
(GRANTEE_TEAM, 'Team'),
)
grantee_type = models.IntegerField(choices=GRANTEE_TYPE,
default=GRANTEE_USER, verbose_name="Grantee type")
grantee_id = models.IntegerField(blank=True)
def get_grantee(self):
if self.grantee_type == self.GRANTEE_USER:
Model = User
elif self.grantee_type == self.GRANTEE_GROUP:
Model = Group
else:
Model = Team
return Model.objects.get(id=self.grantee_id)
def set_grantee(self, grantee):
if isinstance(grantee, User):
self.grantee_type = self.GRANTEE_USER
elif isinstance(grantee, Group):
self.grantee_type = self.GRANTEE_GROUP
elif isinstance(grantee, Team):
self.grantee_type = self.GRANTEE_TEAM
else:
raise ValueError('Grantee object must be '
'an User, a Group or a Team instance.')
self.grantee_id = grantee.id
grantee = property(get_grantee, set_grantee)
class Meta:
abstract = True
def granted_to(self, user):
if not user.is_authenticated():
return False
if self.grantee_type == self.GRANTEE_USER:
return user.id == self.grantee_id
elif self.grantee_type == self.GRANTEE_GROUP:
return user.groups.filter(id=self.grantee_id).exists()
elif self.grantee_type == self.GRANTEE_TEAM:
return Team.objects.filter(id=self.grantee_id) \
.filter(Q(groups__in=user.groups.all()) | Q(users=user)) \
.exists()
else:
return False
@property
def type(self):
return self.get_grantee_type_display()
# return dict(self.GRANTEE_TYPE)[self.grantee_type]
@property
def name(self):
return self.grantee.__str__()
def __str__(self):
return self.grantee.__str__() + "'s permissions"
@python_2_unicode_compatible
class GlobalPermission(PermissionModel):
class Meta:
unique_together = [ 'grantee_type', 'grantee_id' ]
# Global permissions
create_project = models.BooleanField(default=True)
modify_project = models.BooleanField(default=False)
delete_project = models.BooleanField(default=False)
manage_settings = models.BooleanField(default=False)
manage_user = models.BooleanField(default=False)
manage_group = models.BooleanField(default=False)
manage_team = models.BooleanField(default=False)
manage_global_permission = models.BooleanField(default=False)
# Project permissions, given on ALL projects
create_issue = models.BooleanField(default=True)
modify_issue = models.BooleanField(default=False)
manage_issue = models.BooleanField(default=False)
delete_issue = models.BooleanField(default=False)
create_comment = models.BooleanField(default=True)
modify_comment = models.BooleanField(default=False)
delete_comment = models.BooleanField(default=False)
manage_tags = models.BooleanField(default=False)
delete_tags = models.BooleanField(default=False)
manage_project_permission = models.BooleanField(default=False)
def __str__(self):
return self.grantee.__str__() + "'s global permissions"
@python_2_unicode_compatible
class ProjectPermission(PermissionModel):
class Meta:
unique_together = [ 'project', 'grantee_type', 'grantee_id' ]
project = models.ForeignKey(Project, editable=False,
related_name='permissions')
manage_project_permission = models.BooleanField(default=False)
create_issue = models.BooleanField(default=True)
modify_issue = models.BooleanField(default=False)
manage_issue = models.BooleanField(default=False)
delete_issue = models.BooleanField(default=False)
create_comment = models.BooleanField(default=True)
modify_comment = models.BooleanField(default=False)
delete_comment = models.BooleanField(default=False)
manage_tags = models.BooleanField(default=False)
delete_tags = models.BooleanField(default=False)
def __str__(self):
return self.grantee.__str__() + "'s permissions on " \
+ self.project.name + " project"