2014-09-18 4 views
0

У меня есть быстрый вопрос. Для моего файла API.py У меня есть следующий код:Django-Tastypie: аутентификация и авторизация

class MyAuthentication(BasicAuthentication): 
def is_authenticated(self, request, **kwargs): 
    if request.method == 'GET':  
     return True 
    else: 
     #group_name = request.body('group') 
     #if Group.objects.filter(name = group_name): 
     # return super(MyAuthentication, self).is_authenticated(request, **kwargs) 
     return super(MyAuthentication, self).is_authenticated(request, **kwargs) 

class MyAuthorization(DjangoAuthorization): #checks permissions 
def is_authorized(self, request, object=None): 
    if request.method == 'GET': 
     return True 
    return super(MyAuthorization, self).is_authorized(request, object) 

class Sys_teamResource(ModelResource): 
class Meta: 
    queryset = Sys_team.objects.all() 
    resource_name = 'sys_team' 
    filtering = { 'sys_team' : ALL } 
    authentication = MyAuthentication() 
    authorization = MyAuthorization() 
    validation = FormValidation(form_class=Sys_team_Form) 
    allowed_methods = ['get','post','put'] 

Этот код работает отлично, но мне было интересно, что бы happenwhen я заменил return super(MyAuthorization, self).is_authorized(request, object) с return False. Концептуально это должно лишить всех разрешений аутентифицированного пользователя и отказать им в POSTING в базе данных. Однако пользователь все еще может. Мне было интересно, почему это было? Кроме того, что касается вышеописанного кода, я пытаюсь аутентифицировать пользователя, только если он принадлежит к определенной группе. Однако, когда я пытаюсь выполнить request.body('group'), я получаю объект ошибки str, который не может быть вызван. Любая помощь очень ценится! Благодарю.

ответ

0

Ответ на комментарии, и ул объект не вызываемый:

request.data содержит входящие почтовые данные в строке, как правило, в JSON. Поскольку request.data является строкой, выполняющей следующие жалобы о , объект str не может быть вызван.

group_name = request.body('group') 

Таким образом, вы можете использовать json.loads конвертировать входящие JSON в словарь питона, и вы можете получить доступ входящие данные. Таким образом, вы можете получить следующее:

class MyAuthentication(BasicAuthentication): 
    def is_authenticated(self, request, **kwargs): 
     if request.method == 'GET':  
     return True 
    else: 
     import json 

     group_name = json.loads(request.body)['group'] 

     if Group.objects.filter(name = group_name): 
      return super(MyAuthentication, self).is_authenticated(request, **kwargs) 

     return super(MyAuthentication, self).is_authenticated(request, **kwargs) 
Смежные вопросы