Beispiel #1
0
 def permissions(self):
     if hasattr(self, '_permission_mapping'):
         return self._permission_mapping
     self._permission_mapping = BitwiseSet(Permission, self, '_permissions')
     for permission, value in Permission.choices:
         if self._permissions & value:
             self._permission_mapping.add(getattr(Permission, permission))
     return self._permission_mapping
Beispiel #2
0
 def watching(self):
     return BitwiseSet(self, '_wmap', Notification)
     if hasattr(self, '_wmap'):
         return self._wmap
     self._wmap = BitwiseSet(Notification, self, '_watching')
     for permission, value in Notification.choices:
         if self._watching & value:
             self._wmap.add(getattr(Notification, permission))
     return self._wmap
Beispiel #3
0
class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=255, blank=True)
    url = models.URLField(blank=True)
    company = models.CharField(max_length=255, blank=True)
    location = models.CharField(max_length=255, blank=True)
    gravatar = models.EmailField(blank=True)
    _participating = models.IntegerField()
    _watching = models.IntegerField()

    @property
    def participating(self):
        return BitwiseSet(self, '_pmap', Notification)
        if hasattr(self, '_pmap'):
            return self._pmap
        self._pmap = BitwiseSet(Notification, self, '_participating')
        for permission, value in Notification.choices:
            if self._participating & value:
                self._pmap.add(getattr(Notification, permission))
        return self._pmap

    @participating.setter
    def participating(self, permission_set):
        self._participating = 0
        for value in permission_set:
            self._participating |= value

    @property
    def watching(self):
        return BitwiseSet(self, '_wmap', Notification)
        if hasattr(self, '_wmap'):
            return self._wmap
        self._wmap = BitwiseSet(Notification, self, '_watching')
        for permission, value in Notification.choices:
            if self._watching & value:
                self._wmap.add(getattr(Notification, permission))
        return self._wmap

    @watching.setter
    def watching(self, permission_set):
        self._watching = 0
        for value in permission_set:
            self._watching |= value
Beispiel #4
0
class Group(models.Model):
    name = models.CharField(max_length=255, db_index=True)
    organization = models.ForeignKey('Organization', related_name='groups')
    _permissions = models.IntegerField()

    def __unicode__(self):
        return self.name

    @classmethod
    def builtins(cls, organization):
        names = ('Admin', 'User', 'Test', 'Manager', 'Developer')
        return cls.objects.filter(name__in=names, organization=organization)

    @classmethod
    def create_builtins(cls, organization):
        groups = (cls.AdminGroup, cls.UserGroup, cls.TestGroup,
                  cls.DeveloperGroup, cls.ManagerGroup)
        for get_or_create_group in groups:
            get_or_create_group(organization)
        return cls.builtins(organization)

    @classmethod
    def get_or_create_from_permission(cls, name, organization, exclude=[]):
        permissions = Permission.permission_as_int(exclude=exclude)
        admin = {'name': name,
                 'organization': organization,
                 '_permissions': permissions}
        return cls.objects.get_or_create(**admin)

    @classmethod
    def AdminGroup(cls, org):
        return cls.get_or_create_from_permission('Admin', org, exclude=[])

    @classmethod
    def UserGroup(cls, org):
        exclude = ('add_project', 'delete_project',
                   'add_member', 'remove_member', 'commit')
        return cls.get_or_create_from_permission('User', org, exclude=exclude)

    @classmethod
    def TestGroup(cls, org):
        exclude = ('add_project', 'delete_project',
                   'add_member', 'remove_member', 'commit')
        return cls.get_or_create_from_permission('Test', org, exclude=exclude)

    @classmethod
    def DeveloperGroup(cls, org):
        exc = ('add_member', 'remove_member', 'delete_project')
        return cls.get_or_create_from_permission('Developer', org, exclude=exc)

    @classmethod
    def ManagerGroup(cls, org):
        exc = ('add_member', 'remove_member')
        return cls.get_or_create_from_permission('Manager', org, exclude=exc)

    @property
    def permissions(self):
        if hasattr(self, '_permission_mapping'):
            return self._permission_mapping
        self._permission_mapping = BitwiseSet(Permission, self, '_permissions')
        for permission, value in Permission.choices:
            if self._permissions & value:
                self._permission_mapping.add(getattr(Permission, permission))
        return self._permission_mapping

    @permissions.setter
    def permissions(self, permission_set):
        self._permissions = 0
        for value in permission_set:
            self._permissions |= value