检查模板中的用户权限(不是请求用户)

Bel*_*iaf 0 django django-templates django-permissions

您好,有什么方法可以检查模板中自定义用户 nit 请求用户的权限。代码示例:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

或者我必须为每个用户权限编写自定义模型方法?

类似于在 Profile 模型中思考:

def sell_commerce(self):
    if self.has_perm('may_see_commerce_sell'):
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

小智 5

在您的应用程序目录中创建一个目录,将其命名为templatetags然后在templatetags创建mytage.py文件中,然后执行以下操作

#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
Run Code Online (Sandbox Code Playgroud)

然后在模板中加载您的标签

{%load mytags%}
<html lang="en">
.................
{% if user|check_permission:'delete_bills' %}
        ... do something if have permission ...
{% endif %}
...........
</html>
Run Code Online (Sandbox Code Playgroud)

您可以按名称或代号字段过滤权限

列出当前用户的所有权限

登录后在 django 视图中的任何位置

for perm in request.user.permissions.all():
    print(perm.name)
    print(perm.codename)
    print(perm)
Run Code Online (Sandbox Code Playgroud)

这将在控制台中打印当前登录用户的所有权限