2017-02-02 3 views
1

Dans mon application Django, j'ai des opérations CRUD sur certains modèles, auxquels l'utilisateur qui a créé cette ligne doit avoir accès. Ici, ce n'est pas une autorisation basée sur les rôles car tous les utilisateurs sont identiques, je veux qu'ils soient identifiés par l'utilisateur qui les a créés.Autorisation de modèle Django

J'ai essayé quelque chose comme:

Dans mon point de vue, je fais la vérification par:

def view(request, id): 
    model = somemodel.objects.get(id=id, user=request.user) 
    if model.user = request.user: 
    ... 

Serait-ce le plus facile et pourtant être la bonne façon de faire l'autorisation de niveau ligne ?

+0

Merci @ e4c5 !! –

Répondre

1

Idéalement, les vues qui ont besoin de vérifier si l'utilisation est authentifié peut avoir le décorateur login_required. Ensuite, vous pouvez utiliser essayer, sauf si au lieu de d'autre parce que c'est plus pythonique

@login_required 
def view(request, id): 
    try: 
     model = somemodel.objects.get(id=id, user=request.user) #this will raise an exception if not found 
    except Somemodel.DoesnotExist: 
     return HttpResponseRedirect('/login') 

Bien sûr, commence à regarder la plaque de la chaudière comme. C'est là que les vues basées sur la classe entrent en ligne de compte. Sinon, vous pouvez réduire le code de la plaque de la chaudière avec

@login_required 
def view(request, id): 
    my_object = get_object_or_404(SomeModel, pk=1, user=request.user) 
    # get_object_or_404 also throws a MultipleObjectsReturned exception     
    # when more then one object is returned, so catch it if needed. 
+0

Pouvez-vous m'aider avec un exemple basé sur la classe de ceci? –

+0

C'est un peu large, qu'en est-il de la solution get_object_or_404 avec laquelle je viens de mettre à jour la réponse (avant de voir votre commentaire) – e4c5

+0

Le travail initial de l'approche Class Based Views est beaucoup plus – e4c5

0

Vous pouvez même réduire une ligne de vérifier if model.user = request.user: que vous avez déjà filtré les données avec l'utilisateur connecté à model = somemodel.objects.get(id=id, user=request.user)

+0

En effet! Merci ! –

0
class getUserData(APIView): 

    def get(self, request, format=None): 

     userName = request.data['userName'] 

     try: 
      checkUserLoggedIn = YourAuthenticationModel.objects.get(id=id, user=userName) 

      getRow = someModel.objects.filter(user=userName) 

     except ObjectDoesNotExist: 
      print "User does not exist or logged In"