diff --git a/greenmine/base/api.py b/greenmine/base/api.py index 22b5c4a0..3f710506 100644 --- a/greenmine/base/api.py +++ b/greenmine/base/api.py @@ -13,10 +13,12 @@ from rest_framework.permissions import IsAuthenticated from rest_framework import status from rest_framework import generics -from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer -from greenmine.base.models import User +from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer, RoleSerializer +from greenmine.base.models import User, Role from greenmine.scrum import models +import django_filters + class ApiRoot(APIView): def get(self, request, format=None): @@ -41,9 +43,18 @@ class ApiRoot(APIView): 'question_responses': reverse('question-response-list', request=request, format=format), 'wiki/pages': reverse('wiki-page-list', request=request, format=format), 'users': reverse('user-list', request=request, format=format), + 'roles': reverse('user-roles', request=request, format=format), }) +class RoleList(generics.ListCreateAPIView): + model = Role + serializer_class = RoleSerializer + permission_classes = (IsAuthenticated,) + + def get_queryset(self): + return self.model.objects.all() + #class UserFilter(django_filters.FilterSet): # no_milestone = django_filters.NumberFilter(name="mileston", lookup_type='isnull') @@ -53,13 +64,28 @@ class ApiRoot(APIView): # fields = ['project', 'milestone', 'no_milestone'] +class UserFilter(django_filters.FilterSet): + is_active = django_filters.BooleanFilter(name="is_active") + + class Meta: + model = User + fields = ['is_active',] + + class UserList(generics.ListCreateAPIView): model = User serializer_class = UserSerializer + filter_class = UserFilter permission_classes = (IsAuthenticated,) def get_queryset(self): projects = models.Project.objects.filter(members=self.request.user) + + #Project filtering + project = self.request.QUERY_PARAMS.get('project', None) + if project is not None: + projects = projects.filter(id=project) + return super(UserList, self).get_queryset().filter(projects__in=projects)\ .order_by('id').distinct() diff --git a/greenmine/base/serializers.py b/greenmine/base/serializers.py index 90f2a0cb..fa071063 100644 --- a/greenmine/base/serializers.py +++ b/greenmine/base/serializers.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from rest_framework import serializers -from greenmine.base.models import User +from greenmine.base.models import User, Role class UserLogged(object): @@ -56,5 +56,10 @@ class LoginSerializer(serializers.Serializer): class UserSerializer(serializers.ModelSerializer): class Meta: model = User - exclude = ('password',) - #fields = ('id', 'username') + fields = ('id', 'username', 'first_name', 'last_name', 'color', 'is_active',) + + +class RoleSerializer(serializers.ModelSerializer): + class Meta: + model = Role + fields = ('id', 'name', 'slug', 'permissions',) diff --git a/greenmine/base/urls.py b/greenmine/base/urls.py index 1099542a..ae7cfcdc 100644 --- a/greenmine/base/urls.py +++ b/greenmine/base/urls.py @@ -9,5 +9,6 @@ urlpatterns = format_suffix_patterns(patterns('', url(r'^auth/login/$', api.Login.as_view(), name='login'), url(r'^auth/logout/$', api.Logout.as_view(), name='logout'), url(r'^users/$', api.UserList.as_view(), name="user-list"), + url(r'^roles/$', api.RoleList.as_view(), name="user-roles"), url(r'^$', api.ApiRoot.as_view(), name='api_root'), ))