Bonjour,
Je travaille avec Python 3 et Django 1.9 et j'ai le modèle suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Project(models.Model): correspondent = models.OneToOneField( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name='Correspondant', blank=True, # Set to blank when project is archived ) # ... class Meta: permissions = ( # ... ('view_project', 'View a project'), ) |
J'ai deux types d'utilisateurs : les directeurs, qui a toutes les permissions sur tous les projets, et les correspondants, qui n'ont que certaines permissions sur un seul projet, celui dont ils s'occupent.
Premièrement, je ne comprends pas pourquoi la vue suivante retourne une 403 à un directeur, qui dispose de la permission projects.view_project
:
1 2 3 4 5 6 | @login_required def edit_project(request, pk, slug): project = get_object_or_404(models.Project, pk=pk) if not request.user.has_perm('projects.view_project', project): raise PermissionDenied |
Ensuite, j'ignore comment faire un truc du genre, dans la vue qui associe un projet à un correspondant :
1 | correspondent.add_perm('projects.view_project', project) |
Merci.
Edit : Manifestement, ce n'est pas possible par défaut : https://docs.djangoproject.com/fr/1.9/topics/auth/customizing/#handling-object-permissions
Django guardian permet cela : https://pythonhosted.org/django-guardian/