簡體   English   中英

使用 django 配置用戶權限

[英]Configuring user permissions with django

我用 Django 寫了一個 API 服務。 我已授權用戶通過 django 管理面板僅列出客戶端。 當我用我授權的用戶名進入django管理面板時,授權沒有問題。

但是當我訪問api服務時,他從來沒有看到權限。

你能幫助我嗎 ?

api/permissions.py

from rest_framework.permissions import BasePermission
class IsOwner(BasePermission):
    def has_permission(self, request, view):
        return request.user and request.user.is_authenticated
    message = "you cannot change data that you do not own !"

    def has_object_permission(self, request, view, obj):
        return (obj.user == request.user) or request.user.is_superuser

視圖.py

class CustomerListAPIView(ListAPIView):
    serializer_class = CustomerCreateSerializer
    permission_classes = [IsOwner]
    filter_backends = [SearchFilter]
    search_fields = ['customerName', 'customerSurname', 'customerIdentityNo']

    def get_queryset(self):
        queryset = Customer.objects.filter(user=self.request.user)
        return queryset

設置.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
         'rest_framework.permissions.DjangoModelPermissions'
    ]
}

朋友們,

當我運行 api 時,它根本不輸入“ has_object_permission ”。 當我使用用戶帳戶從管理面板登錄時,它只會進入“has_object_permission”。 當我運行 API 時,它永遠不會進入“has_object_permission”。

  1. 首先,檢查您是否在請求中獲得了用戶,您可以按照我上面所說的那樣通過在返回字符串上方的 IsOwner 權限中添加print(request.user)來執行此操作。
  2. 當您向 API 發出請求時,測試您是否在請求中包含了用戶(我猜是從瀏覽器?)。
  3. 如果該函數將打印 None,則您需要在 Authorization 標頭中添加 JWT 令牌。 基本上,這就是 JWT 的工作方式。 您通常需要在請求的 Authorization 標頭中添加字符串(某些代碼字(JWT/Token),在您的設置 + 中定義),以便 API 將您標識為特定用戶。
  4. 您可以從不同的服務中做到這一點。 例如,我通常使用 Postman 服務來測試並向我的 API 發出請求。 你可以在這里找到它: https : //www.getpostman.com/

我寫這個作為答案是因為評論長度不夠。

暫無
暫無

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

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