rsd*_*rsd 4 python django permissions django-class-based-views django-tables2
使用 djang-tables2 自定义表作为:
表.py:
import django_tables2 as tables
from django_tables2.utils import A
from .models import Person
class PersonTable(tables.Table):
view_column = tables.LinkColumn('person:pessoas_detail', args=[A('pk')])
class Meta:
model = Person
Run Code Online (Sandbox Code Playgroud)
视图.py:
from .models import Person
class ListView(SingleTableView):
model = Person
table_class = PersonTable
Run Code Online (Sandbox Code Playgroud)
我需要检查 view_column 上的 FOO 权限。因为 view_column 是一个类属性,我不能使用装饰器作为@permission_required。
可能我可以调用除 tables.LinkColumn 之外的其他内容来测试权限,然后返回该列。但是,为了做到这一点,我需要访问用户对象(可能来自请求对象),此时我无权访问。
有没有更简单的方法来做到这一点?
基本上,这个想法是仅在有权限访问或根本不显示时才显示列。
我认为做你想做的更简单的方法是简单地使用模板列(这就是我所做的):
view_column = tables.TemplateColumn("""
{% if has_perm('FOO') %}
<a href='{% url "person:pessoas_detail" record.id %}>{{ record.id }}</a>
{% else %}
{{ record.id }}
{% endif %}
""", orderable=False)
Run Code Online (Sandbox Code Playgroud)
现在,如果用户具有正确的权限,那么它将显示链接 - 如果没有,它将只显示每条记录的 id。