diff --git a/mayan/apps/user_management/__init__.py b/mayan/apps/user_management/__init__.py index 7f25b704ff..b70cab758c 100644 --- a/mayan/apps/user_management/__init__.py +++ b/mayan/apps/user_management/__init__.py @@ -35,3 +35,4 @@ register_setup(group_setup) endpoint = APIEndPoint('users') endpoint.register_urls(api_urls) endpoint.add_endpoint('user-list', _(u'Returns a list of all the users.')) +endpoint.add_endpoint('group-list', _(u'Returns a list of all the groups.')) diff --git a/mayan/apps/user_management/api_views.py b/mayan/apps/user_management/api_views.py index 55a044e5c5..a8cfb0cf6b 100644 --- a/mayan/apps/user_management/api_views.py +++ b/mayan/apps/user_management/api_views.py @@ -1,6 +1,6 @@ from __future__ import absolute_import -from django.contrib.auth.models import User +from django.contrib.auth.models import Group, User from rest_framework import generics, views from rest_framework.response import Response @@ -8,9 +8,58 @@ from rest_framework.response import Response from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission -from .permissions import (PERMISSION_USER_CREATE, PERMISSION_USER_DELETE, +from .permissions import (PERMISSION_GROUP_CREATE, PERMISSION_GROUP_DELETE, + PERMISSION_GROUP_EDIT, PERMISSION_GROUP_VIEW, + PERMISSION_USER_CREATE, PERMISSION_USER_DELETE, PERMISSION_USER_EDIT, PERMISSION_USER_VIEW) -from .serializers import UserSerializer +from .serializers import GroupSerializer, UserSerializer + + +class APIGroupListView(generics.ListCreateAPIView): + serializer_class = GroupSerializer + queryset = Group.objects.all() + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_GROUP_VIEW]} + mayan_view_permissions = {'POST': [PERMISSION_GROUP_CREATE]} + + def get(self, *args, **kwargs): + """Returns a list of all the groups.""" + return super(APIGroupListView, self).get(*args, **kwargs) + + def post(self, *args, **kwargs): + """Create a new group.""" + return super(APIGroupListView, self).post(*args, **kwargs) + + +class APIGroupView(generics.RetrieveUpdateDestroyAPIView): + serializer_class = GroupSerializer + queryset = Group.objects.all() + + permission_classes = (MayanPermission,) + mayan_object_permissions = { + 'GET': [PERMISSION_GROUP_VIEW], + 'PUT': [PERMISSION_GROUP_EDIT], + 'PATCH': [PERMISSION_GROUP_EDIT], + 'DELETE': [PERMISSION_GROUP_DELETE] + } + + def delete(self, *args, **kwargs): + """Delete the selected group.""" + return super(APIGroupView, self).delete(*args, **kwargs) + + def get(self, *args, **kwargs): + """Return the details of the selected group.""" + return super(APIGroupView, self).get(*args, **kwargs) + + def patch(self, *args, **kwargs): + """Edit the selected group.""" + return super(APIGroupView, self).patch(*args, **kwargs) + + def put(self, *args, **kwargs): + """Edit the selected group.""" + return super(APIGroupView, self).put(*args, **kwargs) class APIUserListView(generics.ListCreateAPIView): diff --git a/mayan/apps/user_management/serializers.py b/mayan/apps/user_management/serializers.py index 68aadab8a8..8fd7e3acef 100644 --- a/mayan/apps/user_management/serializers.py +++ b/mayan/apps/user_management/serializers.py @@ -1,6 +1,6 @@ from __future__ import absolute_import -from django.contrib.auth.models import User +from django.contrib.auth.models import Group, User from rest_framework import serializers @@ -15,3 +15,9 @@ class UserSerializer(serializers.ModelSerializer): user = super(UserSerializer, self).restore_object(attrs, instance) user.set_password(attrs['password']) return user + + +class GroupSerializer(serializers.ModelSerializer): + class Meta: + fields = ('id', 'name') + model = Group diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index a7a58b362e..73f0d1bb12 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import patterns, url -from .api_views import APICurrentUserView, APIUserListView, APIUserView +from .api_views import (APICurrentUserView, APIGroupListView, APIGroupView, + APIUserListView, APIUserView) urlpatterns = patterns('user_management.views', url(r'^user/list/$', 'user_list', (), 'user_list'), @@ -21,6 +22,8 @@ urlpatterns = patterns('user_management.views', ) api_urls = patterns('', + url(r'^groups/$', APIGroupListView.as_view(), name='group-list'), + url(r'^groups/(?P[0-9]+)/$', APIGroupView.as_view(), name='group-detail'), url(r'^users/$', APIUserListView.as_view(), name='user-list'), url(r'^users/(?P[0-9]+)/$', APIUserView.as_view(), name='user-detail'), url(r'^users/current/$', APICurrentUserView.as_view(), name='user-current'),