web-dev-qa-db-fra.com

Django: Masquer le bouton dans le modèle, si l'utilisateur n'est pas super-utilisateur

Comment obtenez-vous votre modèle/vue pour reconnaître si un utilisateur connecté est ou non un super utilisateur?

Il y a certains boutons sur mes formulaires (dans le modèle) que je veux complètement masqués si l'utilisateur n'est pas un super-utilisateur

Comment vous y prendriez-vous?

35
JohnnyCash

Check-out is_superuser sur l'objet User:

{% if request.user.is_superuser %}
    ...
    <button>...</button>
    ...
{% else %}
...
{% endif %}

EDIT: après les commentaires @ mustafa-0x

Ce qui précède suppose que vous avez Django.core.context_processors.request inclus dans votre TEMPLATE_CONTEXT_PROCESSORS paramètre qui n'est pas la valeur par défaut .

paramètre par défaut pour TEMPLATE_CONTEXT_PROCESSORS :

TEMPLATE_CONTEXT_PROCESSORS = (
    'Django.contrib.auth.context_processors.auth',
    'Django.core.context_processors.debug',
    'Django.core.context_processors.i18n',
    'Django.core.context_processors.media',
    'Django.core.context_processors.static',
    'Django.core.context_processors.tz',
#    'Django.core.context_processors.request',
    'Django.contrib.messages.context_processors.messages',
)

comprend déjà le Django.contrib.auth.context_processors.auth (et n'inclut notamment pas le processeur de contexte request) ce qui signifie que dans la plupart des cas, vous aurez déjà accès à {{ user }} sans avoir besoin de l'ajouter à votre contexte via la vue, ou d'activer le processeur de contexte request pour accéder à l'utilisateur comme ci-dessus via {{ request.user }}

80
Timmy O'Mahony

Comme expliqué dans les commentaires, vous pouvez utiliser automatiquement l'objet User qui est disponible dans les modèles:

{% if user.is_superuser %}
<div class="alert alert-success" role="alert">
You are logged in as {{user.first_name}}, here are the
<a href="/admin/">admin pages</a> for changing content.
</div>
{% endif %}

Vous pouvez aussi utiliser user.is_staff qui pourrait être plus approprié.

7
shuckc

En fait, lorsque vous essayez de vérifier la météo du modèle HTML de connexion, l'utilisateur est superutilisateur ou non, vous ne pourrez pas le faire car, dans ce cas précis, ce sera faux, vous pouvez le vérifier dans le fichier views.py, cet utilisateur est super ou pas puis redirigez-la où vous voulez. vous pouvez faire quelque chose comme ça comme vous pouvez le voir dans la fonction de démarrage

0
Daud Ahmed