Bug#226: Now owners can be visualized on the users list of a project

remotes/origin/enhancement/email-actions
Jesús Espino 2014-03-26 13:28:57 +01:00
parent b06db9b603
commit a7b584bdf2
3 changed files with 18 additions and 5 deletions

View File

@ -4,11 +4,13 @@ import uuid
from django.db.models.loading import get_model from django.db.models.loading import get_model
from django.db.models import Q from django.db.models import Q
from django.shortcuts import get_object_or_404
from django.contrib.auth import logout, login, authenticate from django.contrib.auth import logout, login, authenticate
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.filters import BaseFilterBackend
from rest_framework.permissions import IsAuthenticated, AllowAny from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework import status, viewsets from rest_framework import status, viewsets
@ -16,12 +18,21 @@ from djmail.template_mail import MagicMailBuilder
from taiga.base.decorators import list_route, action from taiga.base.decorators import list_route, action
from taiga.base import exceptions as exc from taiga.base import exceptions as exc
from taiga.base.filters import FilterBackend
from taiga.base.api import ModelCrudViewSet, RetrieveModelMixin, ModelListViewSet from taiga.base.api import ModelCrudViewSet, RetrieveModelMixin, ModelListViewSet
from .models import User, Role from .models import User, Role
from .serializers import UserSerializer, RecoverySerializer, PermissionSerializer from .serializers import UserSerializer, RecoverySerializer, PermissionSerializer
class MembersFilterBackend(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
project_id = request.QUERY_PARAMS.get('project', None)
if project_id:
Project = get_model('projects', 'Project')
project = get_object_or_404(Project, pk=project_id)
return queryset.filter(Q(memberships__project=project) | Q(id=project.owner.id)).distinct()
else:
return queryset
class PermissionsViewSet(ModelListViewSet): class PermissionsViewSet(ModelListViewSet):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
serializer_class = PermissionSerializer serializer_class = PermissionSerializer
@ -51,7 +62,7 @@ class UsersViewSet(ModelCrudViewSet):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
serializer_class = UserSerializer serializer_class = UserSerializer
queryset = User.objects.all() queryset = User.objects.all()
filter_fields = [("project", "memberships__project__pk")] filter_backends = (MembersFilterBackend,)
def pre_conditions_on_save(self, obj): def pre_conditions_on_save(self, obj):
if not self.request.user.is_superuser and obj.id != self.request.user.id: if not self.request.user.is_superuser and obj.id != self.request.user.id:

View File

@ -26,7 +26,7 @@ class DomainSerializer(serializers.ModelSerializer):
fields = ('public_register', 'default_language', "projects") fields = ('public_register', 'default_language', "projects")
def get_projects(self, obj): def get_projects(self, obj):
return map(lambda x: {"id": x.id, "name": x.name, "slug": x.slug}, obj.projects.all().order_by('name')) return map(lambda x: {"id": x.id, "name": x.name, "slug": x.slug, "owner": x.owner.id}, obj.projects.all().order_by('name'))
class DomainMemberSerializer(serializers.ModelSerializer): class DomainMemberSerializer(serializers.ModelSerializer):

View File

@ -43,7 +43,8 @@ class ProjectAdminViewSet(ModelCrudViewSet):
return domain.projects.all() return domain.projects.all()
def pre_save(self, obj): def pre_save(self, obj):
obj.owner = self.request.user if not obj.id:
obj.owner = self.request.user
# TODO REFACTOR THIS # TODO REFACTOR THIS
if not obj.id: if not obj.id:
@ -92,7 +93,8 @@ class ProjectViewSet(ModelCrudViewSet):
return qs.distinct() return qs.distinct()
def pre_save(self, obj): def pre_save(self, obj):
obj.owner = self.request.user if not obj.id:
obj.owner = self.request.user
# FIXME # FIXME