Как я могу получить доступ к подробному объекту конечной точки, доступ к которому осуществляется в запросе во время авторизации вкусного пирога?
Я заметил, что один из переопределенных методов в docs имеет объектный параметр - как его установить?
Как я могу получить доступ к подробному объекту конечной точки, доступ к которому осуществляется в запросе во время авторизации вкусного пирога?
Я заметил, что один из переопределенных методов в docs имеет объектный параметр - как его установить?
В филиале Пермь,
https://github.com/toastdriven/django-tastypie/blob/perms/tastypie/authorization.py
Класс Authorization имеет набор методов, например:
def read_detail(self, object_list, bundle):
"""
Returns either ``True`` if the user is allowed to read the object in
question or throw ``Unauthorized`` if they are not.
Returns ``True`` by default.
"""
return True
Здесь вы можете попробовать получить доступ к obj через bundle.obj
Если вы не можете использовать ветку perms, я предлагаю вам следующий способ:
class MyBaseAuth(Authorization):
def get_object(self, request):
try:
pk = resolve(request.path)[2]['pk']
except IndexError, KeyError:
object = None # or raise Exception('Wrong URI')
else:
try:
object = self.resource_meta.object_class.objects.get(pk=pk)
except self.resource_meta.DoesNotExist:
object = None
return object
class FooResourceAuthorization(MyBaseAuth):
def is_authorized(self, request, object=None):
if request.method in ('GET', 'POST'):
return True
elif request.method == 'DELETE':
object = self.get_object(request)
if object.profile = request.user.profile:
return True
return False
Хакерский, но с простым способом доступа к объекту из URL-адреса запроса (вдохновленный кодом внутри DjangoAuthorization).
def is_authorized(self, request, object=None):
meta = self.resource_meta
re_id = re.compile(meta.api_name + "/" + meta.resource_name + "/(\d+)/")
id = re_id.findall(request.path)
if id:
object = meta.object_class.objects.get(id=id[0])
# do whatever you want with the object
else:
# It's not an "object call"