Working on permissions and groups generation
parent
a36a130998
commit
11a63151e0
|
@ -0,0 +1,4 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
admin.site.unregister(Group)
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue