[英]Django - user permissions to certain views?
從管理員我看到您可以為用戶或用戶組分配權限以:允許從模型中添加、更改或刪除數據。
這很好,但我還需要允許用戶或用戶組訪問或不訪問一組視圖。 我的網站上有某些類型的服務,因此我希望允許某些用戶訪問某些服務(頁面/視圖),但不允許其他用戶訪問。
那么如何允許某些用戶/用戶組訪問某些視圖? 謝謝!
無法添加或更改某個模型的用戶將無法在管理中看到它。
如果我們談論的是您自定義創建的視圖,那么您可以創建一些檢查用戶權限的內容,如果他們沒有該權限,則返回 404。 權限與模型相關聯,並且可以為組分配各種權限。
您可以像這樣為模型添加權限:
# myproject/myapp/models.py
class MyModel(models.Model):
class Meta:
permissions = (
('permission_code', 'Friendly permission description'),
)
然后你可以檢查一個用戶是否有這樣的權限:
@user_passes_test(lambda u: u.has_perm('myapp.permission_code'))
def some_view(request):
# ...
使用權限,您只需使用管理界面即可輕松地從用戶和組中添加或刪除它們。
您需要手動管理它,但這很容易。 大概有一個屬性可以確定一個組是否有權查看視圖:那么您只需使用permission_required
裝飾器裝飾該視圖,如果這是用戶是否具有特定權限的簡單問題,或者user_passes_test
如果它有點更復雜:
@user_passes_test(lambda u: u.is_allowed_to_see_view_myview())
def myview(request):
...etc...
假設is_allowed_to_see_view_myview
是 User 對象上的某種方法。
身份驗證文檔非常全面。
對於基於類的視圖,您可以將UserPassesTestMixin
類繼承到視圖中並定義test_func
from django.contrib.auth.mixins import UserPassesTestMixin
class MainView(UserPassesTestMixin, View):
def test_func(self):
return self.request.user.has_perm('app.get_main_view')
有關如何使用它的更多詳細信息,請查看此文檔:
權限系統以模型為中心,並假定權限與模型相關聯。 我認為以下兩種選擇是最佳選擇:
A. 如果您的視圖與某個特定模型相關,請按照 Marcus Whybrow 的建議對該模型使用自定義權限。
B. [未測試,可能不起作用] 子類User
並在那里定義您自己的權限。 您不需要實際模型,它只是您應用程序自定義權限的包裝器:
from django.contrib.auth.models import User
class MyUser(User):
class Meta:
permissions = (('can_visit_$viewset1', 'Can visit $view_set_1'))
不要忘記運行syncdb
向數據庫添加自定義權限。
如果您使用的是 Django 1.9+,您應該能夠使用PermissionRequiredMixin
:
例如:
from django.contrib.auth.mixins import PermissionRequiredMixin
class MainView(PermissionRequiredMixin, View):
permission_required = 'my_services.foo_bar'
...
這基本上是UserPassesTestMixin
一個特例,專門用於測試用戶是否具有指定的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.