from rest_framework import permissions class IsAuthorOrReadOnly(permissions.BasePermission): """ 自定义权限,只允许对象的所有者编辑它。 对于列表视图和详情视图的GET请求,总是允许(如果IsAuthenticatedOrReadOnly也应用了)。 """ def has_object_permission(self, request, view, obj): # 读取权限允许任何请求 (GET, HEAD, OPTIONS) # 这是针对单个对象的权限检查,列表视图的权限由视图的permission_classes控制 if request.method in permissions.SAFE_METHODS: return True # 写入权限只授予帖子的作者 # 确保 obj 有 author 属性,并且 request.user 已认证 # (IsAuthenticated 权限类应该在视图层面已经检查了 request.user 是否存在) return obj.author == request.user