Bug#226: Now owners can be visualized on the users list of a project
parent
b06db9b603
commit
a7b584bdf2
|
@ -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:
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue