1234567891011121314151617 |
- 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
|