0

Hello is there any way to check perms of custom user nit request user in template. Code example:

{% for agency_user in users %}
    <tr>
        <td>{{ agency_user.username }}</td>
        <td>{{ agency_user.get_full_name }}</td>
        <td>{{ agency_user.groups.all.first.name }}</td>
        <td>{{ agency_user.min_price }}</td>
        <td>{{ agency_user.max_price }}</td>
        {% if agency_user|has_perm:'may_see_commerce_sell' %} #not working
            <td>some action</td>
        {% else %}
            <td>some action</td>
        {% endif %}
        <td>
            <a href="{% url 'user_edit' agency_user.id  %}" class="edit icon"></a>
            <a user-id="{{ agency_user.id }}" class="trash icon" title="some action"></a>
        </td>
    </tr>
    {% empty %}
        <td style="text-align: center" colspan="11">some action</td>
{% endfor %}

Or I have to write custom model methods to each user permission?

something like think in Profile model:

def sell_commerce(self):
    if self.has_perm('may_see_commerce_sell'):
        return True
    else:
        return False
Beliaf
  • 577
  • 2
  • 8
  • 25

2 Answers2

6

create a directory inside you app directory name it as templatetags then inside templatetags create mytage.py file then do something like this

#mytage.py
from django import template
register = template.Library()

@register.filter()
def check_permission(user, permission):
    if user.user_permissions.filter(codename = permission).exists():
        return True
    return False

then load your tags in template

{%load mytags%}
<html lang="en">
.................
{% if user|check_permission:'delete_bills' %}
        ... do something if have permission ...
{% endif %}
...........
</html>

you can filter permissions by name or codename field

list all permission for current user

anywhere in your django view after login

for perm in request.user.permissions.all():
    print(perm.name)
    print(perm.codename)
    print(perm)

this will print all permissions for current login user in console

Community
  • 1
  • 1
Naqib Hakimi
  • 874
  • 4
  • 15
2

You could create yourself a template filter to check this, something like..

from django.template import Library

register = Library()

@register.filter()
def check_permission(user, permission):
    return user.has_perm(permission)

Then use it as such..

{% if user|check_permission:'may_see_commerce_sell' %}
    ... do stuff ...
{% endif %}
dannosaur
  • 2,519
  • 1
  • 16
  • 15
  • I create a templatetags directory and add the check_perms.py + init with code below then load it in template but i have received error 'check_perms' is not a registered tag library. Must be one of: – Beliaf Dec 11 '17 at 15:59
  • The `templatetags` directory must be inside one of your installed apps. – Alasdair Dec 11 '17 at 16:45
  • it is in folder of accounts(app)/templatetags/ – Beliaf Dec 11 '17 at 16:58