diff --git a/mayan/apps/permissions/__init__.py b/mayan/apps/permissions/__init__.py index efbc18a0c0..2858bd5ea5 100644 --- a/mayan/apps/permissions/__init__.py +++ b/mayan/apps/permissions/__init__.py @@ -6,6 +6,7 @@ from django.db.models.signals import post_save from navigation.api import register_links from project_setup.api import register_setup +from rest_api.classes import APIEndPoint from .models import Role from .links import (permission_grant, permission_revoke, role_create, @@ -36,3 +37,5 @@ def user_post_save(sender, instance, **kwargs): post_save.connect(user_post_save, sender=User) register_setup(role_list) + +APIEndPoint('permissions') diff --git a/mayan/apps/permissions/api_views.py b/mayan/apps/permissions/api_views.py new file mode 100644 index 0000000000..65c5a956d4 --- /dev/null +++ b/mayan/apps/permissions/api_views.py @@ -0,0 +1,56 @@ +from rest_framework import generics, views + +from rest_api.filters import MayanObjectPermissionsFilter +from rest_api.permissions import MayanPermission + +from .models import Role +from .permissions import (PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, + PERMISSION_ROLE_EDIT, PERMISSION_ROLE_VIEW) +from .serializers import RoleSerializer + + +class APIRoleListView(generics.ListCreateAPIView): + serializer_class = RoleSerializer + queryset = Role.objects.all() + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_ROLE_VIEW]} + mayan_view_permissions = {'POST': [PERMISSION_ROLE_CREATE]} + + def get(self, *args, **kwargs): + """Returns a list of all the roles.""" + return super(APIRoleListView, self).get(*args, **kwargs) + + def post(self, *args, **kwargs): + """Create a new role.""" + return super(APIRoleListView, self).post(*args, **kwargs) + + +class APIRoleView(generics.RetrieveUpdateDestroyAPIView): + serializer_class = RoleSerializer + queryset = Role.objects.all() + + permission_classes = (MayanPermission,) + mayan_object_permissions = { + 'GET': [PERMISSION_ROLE_VIEW], + 'PUT': [PERMISSION_ROLE_EDIT], + 'PATCH': [PERMISSION_ROLE_EDIT], + 'DELETE': [PERMISSION_ROLE_DELETE] + } + + def delete(self, *args, **kwargs): + """Delete the selected role.""" + return super(APIRoleView, self).delete(*args, **kwargs) + + def get(self, *args, **kwargs): + """Return the details of the selected role.""" + return super(APIRoleView, self).get(*args, **kwargs) + + def patch(self, *args, **kwargs): + """Edit the selected role.""" + return super(APIRoleView, self).patch(*args, **kwargs) + + def put(self, *args, **kwargs): + """Edit the selected role.""" + return super(APIRoleView, self).put(*args, **kwargs) diff --git a/mayan/apps/permissions/serializers.py b/mayan/apps/permissions/serializers.py new file mode 100644 index 0000000000..1bbe1cada5 --- /dev/null +++ b/mayan/apps/permissions/serializers.py @@ -0,0 +1,9 @@ +from rest_framework import serializers + +from .models import Role + + +class RoleSerializer(serializers.ModelSerializer): + class Meta: + fields = ('id', 'label') + model = Role diff --git a/mayan/apps/permissions/urls.py b/mayan/apps/permissions/urls.py index 50730af3c4..50d3b4d6a3 100644 --- a/mayan/apps/permissions/urls.py +++ b/mayan/apps/permissions/urls.py @@ -2,6 +2,7 @@ from __future__ import absolute_import from django.conf.urls import patterns, url +from .api_views import APIRoleListView, APIRoleView from .views import RoleCreateView, RoleDeleteView, RoleEditView urlpatterns = patterns('permissions.views', @@ -15,3 +16,8 @@ urlpatterns = patterns('permissions.views', url(r'^permissions/multiple/grant/$', 'permission_grant', (), 'permission_multiple_grant'), url(r'^permissions/multiple/revoke/$', 'permission_revoke', (), 'permission_multiple_revoke'), ) + +api_urls = patterns('', + url(r'^roles/$', APIRoleListView.as_view(), name='role-list'), + url(r'^roles/(?P[0-9]+)/$', APIRoleView.as_view(), name='role-detail'), +)