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 import Q
from django.shortcuts import get_object_or_404
from django.contrib.auth import logout, login, authenticate
from django.contrib.auth.models import Permission
from django.utils.translation import ugettext_lazy as _
from rest_framework.response import Response
from rest_framework.filters import BaseFilterBackend
from rest_framework.permissions import IsAuthenticated, AllowAny
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 import exceptions as exc
from taiga.base.filters import FilterBackend
from taiga.base.api import ModelCrudViewSet, RetrieveModelMixin, ModelListViewSet
from .models import User, Role
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):
permission_classes = (IsAuthenticated,)
serializer_class = PermissionSerializer
@ -51,7 +62,7 @@ class UsersViewSet(ModelCrudViewSet):
permission_classes = (IsAuthenticated,)
serializer_class = UserSerializer
queryset = User.objects.all()
filter_fields = [("project", "memberships__project__pk")]
filter_backends = (MembersFilterBackend,)
def pre_conditions_on_save(self, obj):
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")
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):

View File

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