Django admin, how to check properly user's permission in django template?

django-admin, django-templates, permissions

Solution

Start with checking the perms variable in the template context. Add a `...{{ perms }}...` somewhere visible to the template. It should render like this `...<django.contrib.auth.context_processors.PermWrapper object at X>...`.

If this is not the case you are missing the permissions in the template.

Verify that your settings `TEMPLATE_CONTEXT_PROCESSORS` tuple contains a `django.contrib.auth.context_processors.auth`.

Also make sure to use a `RequestContext` not a `Context` when rendering the template.

If you finally see a PermWrapper but your permission check still doesn't work change the previous debug to `...{{ perms.ccad }}...`. This should output something similar to "set([u'ccad.add_...',...]).

If not then your app might not be called `ccad`.

Finally before creating the if condition be sure that the permission returns something `...{{ perms.ccad.add_logbook }}...´. This should return either True or False.

Now that i am at the end i noticed that your problem is the other way around and all I wrote so far is useless. :)

add `{{ user.is_superuser }}` to your template. If its True the current user has superuser rights that return always True even for `{{ perms.omg.can_facepalm }}`

Problem

Newbie here. My application name is ccad. And the model name is logbook. User A has no permission to edit, add or delete the logbook model from an available user permission. So I tried hiding the save, save and continue editing, save and add another buttons from User A. I followed the advised I found in SO. Here's from picomon inquiry that was answered by Sid. And daniel the same inquiry. I ended up writing the code below to my template. change_form.html located at {{template folder}}/admin/app_name/model_name/ ``` {% if perms.ccad.add_logbook %} <li><input type="submit" value="{% trans 'Save ' %}" class="grp-button grp-default" name="_save" {{ onclick_attrib }}/></li> <li><input type="submit" value="{% trans 'Save and add another' %}" class="grp-button" name="_addanother" {{ onclick_attrib }} /></li> <li><input type="submit" value="{% trans 'Save and continue editing' %}" class="grp-button" name="_continue" {{ onclick_attrib }}/></li> {% endif %} ``` But the user with no permission can still see the buttons I mention. I also try changing `{% if perms.ccad.add_logbook %}` to `{% if perms.ccad.can_add_logbook %}` with no avail. What's best way to do this?

Original source

Related problems