diff --git a/mayan/apps/user_management/__init__.py b/mayan/apps/user_management/__init__.py index f442d68dc9..2203e9e891 100644 --- a/mayan/apps/user_management/__init__.py +++ b/mayan/apps/user_management/__init__.py @@ -1,14 +1,17 @@ from __future__ import absolute_import from django.contrib.auth.models import User, Group +from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_multi_item_links from project_setup.api import register_setup +from rest_api.classes import APIEndPoint from .links import (user_list, user_setup, user_edit, user_add, user_delete, user_multiple_delete, user_set_password, user_multiple_set_password, user_groups, group_list, group_setup, group_edit, group_add, group_delete, group_multiple_delete, group_members) +from .urls import api_urls register_links(User, [user_edit, user_set_password, user_groups, user_delete]) register_links([User, 'user_multiple_set_password', 'user_multiple_delete', 'user_list', 'user_add'], [user_list, user_add], menu_name=u'secondary_menu') @@ -27,3 +30,7 @@ user_management_views = [ register_setup(user_setup) 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.')) diff --git a/mayan/apps/user_management/api_views.py b/mayan/apps/user_management/api_views.py new file mode 100644 index 0000000000..93effdf2d7 --- /dev/null +++ b/mayan/apps/user_management/api_views.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import + +from django.contrib.auth.models import User + +from rest_framework import generics + +from rest_api.filters import MayanObjectPermissionsFilter +from rest_api.permissions import MayanPermission + +from .permissions import (PERMISSION_USER_CREATE, + PERMISSION_USER_DELETE, PERMISSION_USER_EDIT, + PERMISSION_USER_VIEW) +from .serializers import UserSerializer + + +class APIUserListView(generics.ListCreateAPIView): + """ + Returns a list of all the folders. + """ + + serializer_class = UserSerializer + queryset = User.objects.all() + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_USER_VIEW]} + mayan_view_permissions = {'POST': [PERMISSION_USER_CREATE]} + + +class APIUserView(generics.RetrieveUpdateDestroyAPIView): + """ + Returns the selected folder details. + """ + + serializer_class = UserSerializer + queryset = User.objects.all() + + permission_classes = (MayanPermission,) + mayan_object_permissions = { + 'GET': [PERMISSION_USER_VIEW], + 'PUT': [PERMISSION_USER_EDIT], + 'PATCH': [PERMISSION_USER_EDIT], + 'DELETE': [PERMISSION_USER_DELETE] + } diff --git a/mayan/apps/user_management/serializers.py b/mayan/apps/user_management/serializers.py new file mode 100644 index 0000000000..255c1b3717 --- /dev/null +++ b/mayan/apps/user_management/serializers.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import + +from django.contrib.auth.models import User + +from rest_framework import serializers + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + fields = ('id', 'url', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'is_superuser', 'last_login', 'date_joined') + model = User diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index dc2fbcd9f9..8e39795177 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -1,5 +1,7 @@ from django.conf.urls import patterns, url +from .api_views import APIUserListView, APIUserView + urlpatterns = patterns('user_management.views', url(r'^user/list/$', 'user_list', (), 'user_list'), url(r'^user/add/$', 'user_add', (), 'user_add'), @@ -17,3 +19,8 @@ urlpatterns = patterns('user_management.views', url(r'^group/multiple/delete/$', 'group_multiple_delete', (), 'group_multiple_delete'), url(r'^group/(?P\d+)/members/$', 'group_members', (), 'group_members'), ) + +api_urls = patterns('', + url(r'^users/$', APIUserListView.as_view(), name='user-list'), + url(r'^users/(?P[0-9]+)/$', APIUserView.as_view(), name='user-detail'), +)