簡體   English   中英

Django模塊的用戶權限

[英]User permissions for Django module

我的Django模板中的權限有一個小問題。

我正在嘗試根據權限在菜單欄中為我的項目顯示一個圖標。 我想擁有它,以便如果用戶有權向項目添加新的后續操作,他們可以看到圖標,如果他們沒有該權限,則不顯示該鏈接。

我的權限語法是follow.add_followup ,我從打印user.get_all_permissions()

我在我的模板中嘗試了這段代碼:

...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...

但是當我顯示模板時,我遇到了這個錯誤:

/ project / 232 / view /中的TemplateSyntaxError

無法解析剩余部分:來自'user.has_perm(followup.add_followup)'的'(followup.add_followup)'

有什么想法嗎? 這讓我很頭疼! :)

由於您使用的是Django權限系統,因此最好使用以下模板語法...

{%if perms.followup.add_followup%}your URL here{%endif%}

編輯:Django自動為每個模型創建3個權限,'添加','更改'和'刪除'。 如果沒有用於添加鏈接的模型,則必須在模型類Meta中添加相關模型的權限...同樣:

somemodels.py

class SomeModel(Model):
    ...
    class Meta:
    permissions = (('add_followup','Can see add urls'),(...))

在Django auth用戶管理頁面中,您可以看到您的權限。 在模板層中,權限以基本的Django樣式呈現,

<app_label>.<codename>

在這種情況下,它將像:

{%if perms.somemodels.add_followup%}your URL here{%endif%}

如果沒有與您希望的工作相關的模型,則將權限添加到模型中...

在您的模板中,您可以編寫

{{perms.somemodels}}

密封該用戶的可用權限,其中somemodel是您將其權限添加到其某個模型的應用程序的名稱。

這是我非常簡單的解決方案,在你的模板中添加:

例如:

.......

{% if 'user.can_drink' in user.get_all_permissions %}
   {{ user }} can drink.
   .......
{% else %}
   {{ user }} can´t drink.
    ........
{% endif %}

.......

Django文檔詳細說明了答案#2: https//docs.djangoproject.com/en/dev/topics/auth/#id9

當前登錄用戶的權限存儲在模板變量{{perms}}中。 這是django.contrib.auth.context_processors.PermWrapper的一個實例,它是一個模板友好的權限代理。

我在我的模板中嘗試了這段代碼:

這種復雜的決策是在視圖功能中進行的。

或者它進入上下文,然后呈現給模板。

https://stackoverflow.com/search?q=%5Bdjango%5D+context

何時使用上下文處理器

在您的視圖中執行此操作

def my_view( request ):
    followup= user.has_perm('followup.add_followup')
    # etc.
    return render_to_response( template, {'followup':followup,... )

然后你的模板很簡單

{% if followup %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM