django-rest-framework - DRF 自定义权限:允许“检索”,拒绝“列表”
问题描述
tldr:我想获得允许“检索”操作但不允许“列表”的权限。
我正在使用 Django Rest Framework 编写 REST API,但在创建自定义权限时遇到了问题(对于来自 viewsets.ModelViewSet 的视图)
在创建一个应该返回站点用户的端点时遇到了困难:
-Admin 应该有权访问每个方法
- 普通用户应该只能“检索”和“修补”他自己的帐户
我找不到将 GET 请求“列表”与“检索”区分开来的方法。检查request.method == GET
允许他们两个,但我不希望用户能够列出所有其他用户。
from rest_framework.permissions import BasePermission
```
def is_superuser(request):
return request.user.is_superuser
```
class IsAdminOrReadOnlyOwner(BasePermission):
def has_permission(self, request, view):
if is_superuser(request):
return True
else:
return request.method in ['GET', 'PATCH']
def has_object_permission(self, request, view, obj):
is_owner_and_safe = int(request.user.id) == obj.id and request.method in ['GET', 'PATCH']
return is_owner_and_safe or is_superuser(request)
有没有办法做到这一点,仍然使用 ModelViewSet?
解决方案
尝试self.action
在你的 mixin 中使用方法。它将为您提供列表、检索、更新、销毁作为您的操作方法,
推荐阅读
- python - 是否可以在 PyQt/PySide2 中为 QLineEdit 的文本制作“破碎”边框
- android - 检查哪个图像附加到 imageView
- html - 基于 rem 的 css 响应式流体 html 字体大小
- amazon-web-services - 亚马逊预测:[错误]:项目数 (n) 的观测值 (n) 太少,每个项目平均 1.000 个观测值
- java - 安道尔工作室的媒体播放器
- database - Flutter:如何为我们要上传到 Firebase 数据库的每个元素设置数据类型?
- firebase - Flutter 构建错误。(与 pub-cache 相关)
- php - Laravel 资源 - 它是如何工作的?
- javascript - App Script Google Classroom API 通过批处理(循环)将教师添加到课程中
- c# - 理解这个表达式主体定义