我正在尝试为自定义User
模型配置权限,并且正在使用Viewset为该模型运行CRUD操作。根据操作,我需要设置不同的权限要求,例如:
create
新的User
实例retrieve
或update
用户由于某种原因,当我在类中定义get_permissions
方法时,就像这样:
def get_permissions(self):
if self.action == 'create':
return [AllowAny(),]
elif self.action == 'me':
return [IsAuthenticated(),]
return [IsAuthenticated(), IsOwnerOrAdmin()]
但是当我导航到/api/v1/users/
时,DRF资源管理器没有显示用于创建新User
的表单,并给了我403错误。另一方面,当我注释掉此函数时,我可以正确查看表单,但显然不能那样使用。
作为参考,我的自定义IsOwnerOrAdmin
权限类如下:
class IsOwnerOrAdmin(permissions.BasePermission):
@staticmethod
def _is_admin(request):
return request.user.is_superuser
def has_permission(self, request, view):
try:
is_owner = str(request.user.id) == view.kwargs.get('pk')
return is_owner or self._is_admin(request)
# if request.user.uuid is not there (i.e. AnonymousUser)
except AttributeError:
return False
这里可能是什么问题?
答案 0 :(得分:0)
class IsOwnerOrAdmin(BasePermission):
@staticmethod
def _is_admin(request):
return request.user.is_superuser
def has_object_permission(self, request, view, obj):
return obj == request.user or self._is_admin(request)