taiga-back/greenmine/base/services.py

31 lines
1.2 KiB
Python

from django.contrib.auth.models import Group
from greenmine.scrum.models import Project
from greenmine.base.models import Role
class RoleGroupsService(object):
def replicate_role_on_all_projects(self, role):
for group in role.groups.all():
self._replicate_role_permissions_on_group(role, group)
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, project=project)
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, project=project)
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()