Working on permissions and groups generation

remotes/origin/enhancement/email-actions
Jesús Espino 2013-03-22 18:13:01 +01:00
parent a36a130998
commit 11a63151e0
5 changed files with 48 additions and 36 deletions

4
greenmine/base/admin.py Normal file
View File

@ -0,0 +1,4 @@
from django.contrib import admin
from django.contrib.auth.models import Group
admin.site.unregister(Group)

View File

@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import Permission, Group
from django.contrib.auth.models import User, Group
class Profile(models.Model):
user = models.OneToOneField("auth.User", related_name='profile')
@ -23,7 +24,7 @@ class Profile(models.Model):
class Role(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True, blank=True)
permissions = models.ManyToManyField(Permission,
permissions = models.ManyToManyField('auth.Permission',
verbose_name=_('permissions'), blank=True)
def __unicode__(self):
@ -34,4 +35,19 @@ if not hasattr(Group, 'role'):
field.contribute_to_class(Group, 'role')
from . import sigdispatch
@receiver(post_save, sender=User)
def user_post_save(sender, instance, created, **kwargs):
"""
Create void user profile if instance is a new user.
"""
if created and not Profile.objects.filter(user=instance).exists():
Profile.objects.create(user=instance)
@receiver(post_save, sender=Role)
def role_post_save(sender, instance, **kwargs):
from greenmine.profile.services import RoleGroupsService
"""
Recalculate projects groups
"""
RoleGroupsService().replicate_role_on_all_projects(instance)

View File

@ -1,6 +1,7 @@
from django.contrib.auth.models import Group
from greenmine.scrum.models import Project
from greenmine.profile.models import Role
class RoleGroupsService(object):
def replicate_role_on_all_projects(self, role):
@ -9,15 +10,21 @@ class RoleGroupsService(object):
for project in Project.objects.all():
self._replicate_role_on_project_if_needed(role, project)
def replicate_all_roles_on_one_project(self, project):
for role in Role.objects.all():
group = Group(name="p%d-r%d" % (project.pk, role.pk), role=role)
group.save()
self._replicate_role_permissions_on_group(role, group)
def _replicate_role_on_project_if_needed(self, role, project):
if project.groups.filter(role=role).count() == 0:
group = Group(name="p%d-r%d" % (project.pk, role.pk), role=role)
group.save()
self._replicate_role_permissions_on_group(role, group)
def _replicate_role_permissions_on_group(self, role, group):
group.permissions.clear()
for permission in role.permissions.all():
group.permissions.add(permission)
group.save()
def _replicate_role_on_project_if_needed(self, role, project):
if project.groups.filter(role=role).count() == 0:
group = Group(name="p%d-r%d" % (project.pk, role.pk), role=role)
group.save()
role.groups.add(group)
self._replicate_role_permissions_on_group(role, group)

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import Profile, Role
from .services import RoleGroupsService
@receiver(post_save, sender=User)
def user_post_save(sender, instance, created, **kwargs):
"""
Create void user profile if instance is a new user.
"""
if created and not Profile.objects.filter(user=instance).exists():
Profile.objects.create(user=instance)
@receiver(post_save, sender=Role)
def role_post_save(sender, instance, created, **kwargs):
"""
Recalculate projects groups
"""
RoleGroupsService().replicate_role_on_all_projects(instance)

View File

@ -4,12 +4,15 @@ from django.dispatch import receiver
from django.conf import settings
from django.utils.translation import ugettext
from django.template.loader import render_to_string
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from greenmine.base import signals
from greenmine.base.utils.auth import set_token
from greenmine.base.mail.tasks import send_mail, send_bulk_mail
from greenmine.scrum.models import Project
from greenmine.profile.services import RoleGroupsService
@receiver(signals.mail_new_user)
@ -105,3 +108,11 @@ def mail_task_assigned(sender, task, user, **kwargs):
subject = ugettext("Greenmine: task assigned")
send_mail.delay(subject, template, [task.assigned_to.email])
@receiver(post_save, sender=Project)
def project_post_save(sender, instance, created, **kwargs):
"""
Recalculate project groups
"""
if created:
RoleGroupsService().replicate_all_roles_on_one_project(instance)