【发布时间】:2019-01-19 02:30:22
【问题描述】:
我正在尝试为我的自定义 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
这可能是什么问题?
【问题讨论】:
标签: python django permissions django-rest-framework