2017-05-23 1 views
0

J'apprends l'authentification Django pour le moment et ça a l'air génial!
Cependant, il est venu à mon attention que cela semble un peu trop basé sur le modèle.Non basé sur le modèle Django auth

Ce que je pense est que disons que j'ai deux pages Web (surveillance, statistiques) et ils utilisent tous deux le même modèle (table d'événements). Ce que je veux, c'est ajouter l'autorisation à différents utilisateurs d'accéder à la surveillance et aux statistiques, comme: can_use_monitoring, can_use_statistics.
Je suppose que ce n'est pas un problème d'ajouter le même modèle à ces 2 autorisations, mais semble inutile et trompeur. Ou est-ce que je manque quelque chose?

Comment y parviendrez-vous?

Merci,
V.

/////// MISE À JOUR /////////
Une pensée: ce que je veux est d'avoir l'autorisation sur la base des pages Web et pas sur les modèles. Il est possible qu'une page utilise plus de modèles et je ne saurais pas quel modèle dois-je attribuer à la permission (comme je peux le faire).

Répondre

0

Je suppose que ce n'est pas un problème d'ajouter le même modèle à ces 2 autorisations, mais semble inutile et trompeur. Ou est-ce que je manque quelque chose?

Oui, il n'y a pas de problème pour ajouter le même modèle à différentes autorisations.

Généralement, vous devez utiliser la fonctionnalité Django's Groups. Créez un groupe disposant d'un ensemble d'autorisations, puis continuez d'ajouter des utilisateurs au groupe.

https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.decorators.user_passes_test

Une pensée: ce que je veux est d'avoir l'autorisation sur la base des pages Web et non sur les modèles. Il est possible qu'une page utilise plus de modèles et je ne saurais pas quel modèle dois-je attribuer à la permission (comme je peux le faire).

Ceci est rendu possible en utilisant la décoration de votre point de vue avec les décorateurs user_passes_test ou permission_required. More here. et here

par exemple

from django.contrib.auth.decorators import user_passes_test 
@user_passes_test(email_check) 
def my_view(request): 
    ... 

def email_check(user): 
    return user.email.endswith('@example.com') 
+0

Merci Nosh pour la réponse! Je pense que d'après la réponse, il n'y a pas d'autre moyen que de partir du modèle. Comment géreriez-vous le cas que j'ai mentionné dans la section UPDATE de ma question initiale (avoir deux pages, en utilisant le même modèle)? Ajoutez simplement une autorisation 'can_use_monitoring' et choisissez l'un des modèles utilisés? – Viktor

+0

Oui, si vous voulez gérer l'utilisateur en utilisant les permissions django api. La convention est d'utiliser le modèle le plus important dans le groupe que vous traitez. Ou vous pouvez simplement utiliser 'user_passes_test' et transmettre une fonction personnalisée. Par exemple: une fonction pour vérifier si l'utilisateur appartient à un groupe comme 'system-admins'. – Nosh

+0

ok, merci Nosh! – Viktor