Files
mayan-edms/mayan/apps/rest_api/permissions.py
Roberto Rosario 61ebda6e63 REST API app updates
- Add back support for API views but using the
api_urlpatterns list. Needed for the current user
API until a dynamic route router is implemented that
can allow a viewset action to specify its entire URL.

- Make sure the user is authenticated before
trying to the user permissions.

- Improve how external_object_list options are read from
the class.

- None authenticated users will get a blank queryset if the
view doesn't require a permission.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-02-07 20:13:35 -04:00

39 lines
1.3 KiB
Python

from __future__ import absolute_import, unicode_literals
from django.core.exceptions import PermissionDenied
from rest_framework.permissions import BasePermission, IsAuthenticated
from mayan.apps.permissions import Permission
class MayanViewSetPermission(BasePermission):
def has_permission(self, request, view):
"""
Block the API view by access using a permission.
Required the view_permission_map class attribute which is a dictionary
that matches a view actions ('create', 'destroy', etc) to a single
permission instance.
Example: view_permission_map = {
'update': permission_..._edit
'list': permission_..._view
}
"""
if not request.user or not request.user.is_authenticated:
return False
view_permission_dictionary = getattr(view, 'view_permission_map', {})
view_permission = view_permission_dictionary.get(view.action, None)
if view_permission:
try:
Permission.check_user_permission(
permission=view_permission, user=request.user
)
except PermissionDenied:
return False
else:
return True
else:
return True