Partage
  • Partager sur Facebook
  • Partager sur Twitter

Django - Gestion des droits

    12 mai 2021 à 17:42:39

    Bonjour,

    Je suis en train de commencer a bâtir un application et j'ai une question concernant la gestion des droits des utilisateurs dans la BO DJANGO.

    J'ai une table voiture dans laquelle j'ai une clef externe vers users. Et ce que je souhaiterais c'est que un user (staff mais pas superuser) puisse ajouter des voitures ou modifier des voitures mais uniquement celles qui lui sont associées.

    Est ce que cela est possible directement dans le BO fourni par DJANGO ?

    from django.db import models
    from django.contrib.auth.models import User
    import datetime
    from brand.models import Brands
    from django.urls import reverse
    
    # Create your models here.
    class Car(models.Model):
        dealer = models.ForeignKey(User, on_delete=models.DO_NOTHING)
        brand = models.ForeignKey(Brands, on_delete=models.DO_NOTHING)
        carname = models.CharField(max_length=100)
        power = models.IntegerField()
        fuel = models.IntegerField()
        price = models.IntegerField()
        description = models.TextField()
        date = models.DateField()
    
        def __str__(self):
            return '%s %s' % (self.brand, self.carname)

    Merci beaucoup !

    -
    Edité par antoinedelcisco 12 mai 2021 à 17:43:47

    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2021 à 18:06:49

      Je vois ça plutôt au niveau applicatif. L'utilisateur ne doit voir que les voitures auxquels il est associé

      -
      Edité par umfred 12 mai 2021 à 18:06:59

      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2021 à 18:14:56

        Oui c'est exactement cela.

        Par niveau application, tu sous-entends qu'il faut créer une page de connexion qui redirige vers un BO "maison" dans lequel je filtre l'affichage par users ?

        • Partager sur Facebook
        • Partager sur Twitter
          12 mai 2021 à 18:36:47

          ou tu ne passes que les infos filtrées
          • Partager sur Facebook
          • Partager sur Twitter
            12 mai 2021 à 20:41:29

            Comment est ce que cela ce modélise ?

            Tu aurais un exemple

            Merci

            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2021 à 18:29:23

              antoinedelcisco a écrit:

              Par niveau application, tu sous-entends qu'il faut créer une page de connexion qui redirige vers un BO "maison" dans lequel je filtre l'affichage par users ?


              C'est déjà fait automatiquement par Django... Un utilisateur connecté peut accéder aux voitures créés et associées à son username.

              Pour ajouter une voiture, il faut déjà là créer et ensuite y donner son propriétaire. Donc ce que tu crées avec ton model Car me semble très bien pour faire ce que tu veux.

              • Partager sur Facebook
              • Partager sur Twitter

              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                19 mai 2021 à 19:36:13

                Malheureusement non j'ai un super user et un user "staff" et sur le user staff je peux voir toutes les voitures, meme celles associées au superuser, peut etre que j'ai raté un truc ?

                • Partager sur Facebook
                • Partager sur Twitter
                  19 mai 2021 à 20:12:50

                  Parce-que quand tu affiches l'ensemble des voitures, tu dois afficher en filtrant celle appartenant à l'user connecté.

                  cars = Car.objects.filter(dealer__username="...")

                  les ... sont à remplacer par le nom de la personne dont tu souhaites connaître ses voitures.

                  donc dans une view, ça donne quelque chose comme ça,

                  def cars_view(request):
                      user = request.user
                      cars = Car.objects.filter(dealer=user)
                      if cars.exists():
                          return render(...)
                      return render(...)
                  

                  Il faudra sans doute mettre un décorateur pour bien vérifier que la condition pour accéder à cette vue sera d'être logué.

                  -
                  Edité par fred1599 19 mai 2021 à 20:13:04

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                  La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  Django - Gestion des droits

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown