2013-08-08 1 views
0

J'utilise un ManyToManyField pour un access_list sur mon site:Django gestion d'une liste d'accès utilisateur avec le champ ManyToMany

class Projects(models.Model): 
    access_list = models.ManyToManyField(User) 

et dans mon Views.py je sauve l'utilisateur qui a créé le projet dans le access_list, puis j'affiche les utilisateurs dans le access_list sur la page access_update.html, où un utilisateur peut ajouter un autre nom à soumettre au access_list, permettant plus de collaborateurs. Il y a aussi un bouton Supprimer un utilisateur afin que vous puissiez supprimer des utilisateurs du access_list. Ma grande préoccupation cependant est que maintenant, si un utilisateur est sur le access_list, ils pourraient entrer et supprimer le créateur original du access_list et leur refuser l'accès au projet.

Je voulais avoir un created_by = models.ForeignKey(User) comme sauvegarde, de sorte que ma permission serait fondée sur created_by OU access_list, mais en essayant d'avoir un ForeignKey(User) et un ManyToManyField(User) ne validera pas le modèle.

Existe-t-il un meilleur moyen d'empêcher l'utilisateur qui a créé le projet d'être démarré de la liste, tout en permettant aux utilisateurs d'avoir la possibilité de supprimer leur liste de collaborateurs?

Répondre

0

Vous pouvez mettre un related_name sur votre domaine et il doit valider:

access_list = models.ManyToManyField(User, related_name='user_access_list') 
+0

Mon ManyToManyField valide maintenant, que l'installation fonctionne, le problème est plus que tout utilisateur dans le ManyToManyField peut supprimer tout autre utilisateur du ManyToManyField , y compris eux-mêmes, et qu'est-ce que je voudrais empêcher. un "created_by = Models.ForeignKey (User)" aiderait parce que je pourrais définir l'autorisation à access_list * ou * created_by, mais je ne peux pas avoir un ForeignKey (User) et un ManyToManyField (User) dans le même modèle. –

+0

Donc ce que vous voudriez, c'est masquer 'access_list' sur la vue de modification et les empêcher d'enregistrer sur le modèle? –

+0

Je souhaite que les personnes figurant dans access_list puissent ajouter ou supprimer des utilisateurs de la liste access_list, mais je souhaite la protection de la personne qui a créé le projet afin qu'une personne malveillante sur access_list ne puisse pas retirer tout le monde de access_list désactiver le projet entier. À l'heure actuelle, si vous créez un nouveau projet, vous êtes enregistré dans la liste access_list et vous pouvez y ajouter d'autres utilisateurs. Mais un autre utilisateur de cette liste peut supprimer l'utilisateur d'origine. Je voudrais un moyen de prévenir cela –

Questions connexes