簡體   English   中英

Django 應用自定義用戶權限

[英]Django applying custom user permissions

我目前正在使用這種方法向用戶提供與他們相關的頁面。

def get_user_url(request):
    un = request.user.username
    t = get_template(un + '.htm')
    html = t.render()
    return HttpResponse(http)

我只期待一小部分用戶,每個用戶代表一家公司,所以這不是問題,因為我可以簡單地擁有五六個不同內容的 html 文件。 現在,我被要求對每個公司的多個用戶進行說明,假設同一公司下的用戶具有不同的權限。

所以我查看了自定義權限的文檔: https : //docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-permissions可以工作,但我最終可能會得到一個 30 行的權限類像下面這樣,這讓我覺得這是一種糟糕的方式。

permissions = (
        ("company1_permission1", "Company 1 Permission 1"),
        ("company1_permission2", "Company 1 Permission 2"),
        ("company2_permission1", "Company 1 Permission 1"),
        ("company2_permission2", "Company 1 Permission 2"),
        ("company3_permission1", "Company 1 Permission 1"),
    )

有沒有辦法可以向用戶添加“公司”字段並使用上述兩種方法? 因此,除非來自正確的公司,否則用戶甚至無法訪問頁面。 然后在該頁面中,我將自定義權限應用於該頁面上的內容。

或者,是否有更好的方法來實現這種功能。 我是 Django 和 python 的新手。

一個好的解決方案是使用@user_passes_test()裝飾器

這些文檔提供了一個很好的示例,用於確保用戶的電子郵件來自特定公司,您可以輕松地根據您的用例進行調整:

from django.contrib.auth.decorators import user_passes_test

def email_check(user):
    return user.email.endswith('@example.com')

@user_passes_test(email_check)
def my_view(request):
    ...

這種方法的主要問題是您無法訪問代碼中的request對象。 一個解決方案是使用基於類的視圖,其中UserPassesTestMixin可以訪問self.request

暫無
暫無

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

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