[英]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.