prepend_urls 方法的 Django Tastypie 身份验证
Django Tastypie Authentication for prepend_urls methods
我的应用程序有几种用户类型 admin、user 和 manager。
我已经为资源定义了一个端点,它有几个 prepend_urls。
例如:端点将是
/Profile/search/
/Profile/shortview/
/Profile/
如何限制对端点的访问,以便
/Profile/search/ is accessible to admin, manager
/Profile/shortview/ is accessible to all
/Profile/ is accessible to admin only
我考虑过使用我自己的 class 但用于身份验证和授权,但认为它们应用于整个资源而不是单个 prepend_url 端点。
authorization = MyAuthorization()
authentication= MyAuthentication()
感谢任何帮助
我假设您已经配置了 prepend_urls
,因此您包装了一个名为 dispatch_search
的函数,所以如果用户未被授权使用端点:
def dispatch_search(self, request, *args, **kwargs):
# check authorization here
self._meta.authorization.is_authorized(request)
从下方编辑
从 DjangoAuthorization class 继承时,您还可以重写方法:
- read_detail(自身,object_list,捆绑)
- read_list(自身,object_list,捆绑)
如果用户不能读取特定资源或资源列表本身,则引发异常。
以及您的 MyAuthorization class:
from tastypie.exceptions import Unauthorized
from tastypie.authorization import DjangoAuthorization
class MyAuthorization(DjangoAuthorization):
def is_authorized(self, request):
if request.user.is_superuser and 'search' in request.path:
return True
# more business logic here to check the other endpoints
raise Unauthorized('Unauthorized :(')
def read_list(self, object_list, bundle):
self.is_authorized(bundle.request) # call your custom validation
# Fallback to the DjangoAuthorization read_list
return super(MyAuthorization, self).read_list(object_list, bundle)
请参阅文档以获取您可以重写以添加更多业务逻辑的完整函数列表:http://django-tastypie.readthedocs.org/en/latest/authorization.html#the-authorization-api
我的应用程序有几种用户类型 admin、user 和 manager。
我已经为资源定义了一个端点,它有几个 prepend_urls。 例如:端点将是
/Profile/search/
/Profile/shortview/
/Profile/
如何限制对端点的访问,以便
/Profile/search/ is accessible to admin, manager
/Profile/shortview/ is accessible to all
/Profile/ is accessible to admin only
我考虑过使用我自己的 class 但用于身份验证和授权,但认为它们应用于整个资源而不是单个 prepend_url 端点。
authorization = MyAuthorization()
authentication= MyAuthentication()
感谢任何帮助
我假设您已经配置了 prepend_urls
,因此您包装了一个名为 dispatch_search
的函数,所以如果用户未被授权使用端点:
def dispatch_search(self, request, *args, **kwargs):
# check authorization here
self._meta.authorization.is_authorized(request)
从下方编辑
从 DjangoAuthorization class 继承时,您还可以重写方法:
- read_detail(自身,object_list,捆绑)
- read_list(自身,object_list,捆绑)
如果用户不能读取特定资源或资源列表本身,则引发异常。
以及您的 MyAuthorization class:
from tastypie.exceptions import Unauthorized
from tastypie.authorization import DjangoAuthorization
class MyAuthorization(DjangoAuthorization):
def is_authorized(self, request):
if request.user.is_superuser and 'search' in request.path:
return True
# more business logic here to check the other endpoints
raise Unauthorized('Unauthorized :(')
def read_list(self, object_list, bundle):
self.is_authorized(bundle.request) # call your custom validation
# Fallback to the DjangoAuthorization read_list
return super(MyAuthorization, self).read_list(object_list, bundle)
请参阅文档以获取您可以重写以添加更多业务逻辑的完整函数列表:http://django-tastypie.readthedocs.org/en/latest/authorization.html#the-authorization-api