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 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.db import models
|
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.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):
|
class Profile(models.Model):
|
||||||
user = models.OneToOneField("auth.User", related_name='profile')
|
user = models.OneToOneField("auth.User", related_name='profile')
|
||||||
|
@ -23,7 +24,7 @@ class Profile(models.Model):
|
||||||
class Role(models.Model):
|
class Role(models.Model):
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
slug = models.SlugField(max_length=250, unique=True, blank=True)
|
slug = models.SlugField(max_length=250, unique=True, blank=True)
|
||||||
permissions = models.ManyToManyField(Permission,
|
permissions = models.ManyToManyField('auth.Permission',
|
||||||
verbose_name=_('permissions'), blank=True)
|
verbose_name=_('permissions'), blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
@ -34,4 +35,19 @@ if not hasattr(Group, 'role'):
|
||||||
field.contribute_to_class(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 django.contrib.auth.models import Group
|
||||||
|
|
||||||
from greenmine.scrum.models import Project
|
from greenmine.scrum.models import Project
|
||||||
|
from greenmine.profile.models import Role
|
||||||
|
|
||||||
class RoleGroupsService(object):
|
class RoleGroupsService(object):
|
||||||
def replicate_role_on_all_projects(self, role):
|
def replicate_role_on_all_projects(self, role):
|
||||||
|
@ -9,15 +10,21 @@ class RoleGroupsService(object):
|
||||||
for project in Project.objects.all():
|
for project in Project.objects.all():
|
||||||
self._replicate_role_on_project_if_needed(role, project)
|
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):
|
def _replicate_role_permissions_on_group(self, role, group):
|
||||||
group.permissions.clear()
|
group.permissions.clear()
|
||||||
for permission in role.permissions.all():
|
for permission in role.permissions.all():
|
||||||
group.permissions.add(permission)
|
group.permissions.add(permission)
|
||||||
group.save()
|
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.conf import settings
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from greenmine.base import signals
|
from greenmine.base import signals
|
||||||
from greenmine.base.utils.auth import set_token
|
from greenmine.base.utils.auth import set_token
|
||||||
from greenmine.base.mail.tasks import send_mail, send_bulk_mail
|
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)
|
@receiver(signals.mail_new_user)
|
||||||
|
@ -105,3 +108,11 @@ def mail_task_assigned(sender, task, user, **kwargs):
|
||||||
|
|
||||||
subject = ugettext("Greenmine: task assigned")
|
subject = ugettext("Greenmine: task assigned")
|
||||||
send_mail.delay(subject, template, [task.assigned_to.email])
|
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