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