我的应用程序有几个用户类型admin,user和manager。
我已经为Resource定义了一个端点,它有几个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
我曾想过使用我自己的类但是用于身份验证和授权,但认为它们适用于整个资源而不是单独的prepend_url端点。
authorization = MyAuthorization()
authentication= MyAuthentication()
感谢任何帮助
答案 0 :(得分:1)
我假设您已经配置了prepend_urls
,因此您已经包含了一个名为dispatch_search
的函数,因此如果用户未经授权使用该函数,则此类内容将引发异常端点:
def dispatch_search(self, request, *args, **kwargs):
# check authorization here
self._meta.authorization.is_authorized(request)
从下方编辑
从DjangoAuthorization类继承时,您还可以覆盖方法:
如果用户不能读取特定资源或资源列表本身,则引发异常。
你的MyAuthorization类:
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