permissions.py 857 B

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