我是 django rest framework 的新手,我对权限有一些疑问。
所以我有一个用户,他是组织成员和某个组的成员。 假设我们有一个模型:
class SomeModel:
organization = models.ForeignKey(Organization)
name = models.CharField()
用户只能为自己的组织创建
/更新
SomeModel
,如果他是一组“协调员”,他也可以为任何组织创建
/更新
。
目前我的方法是在序列化程序中检查这些条件,在 .create()
和 .update()
方法中,因为数据已经过验证并且我正在在那里引发 PermissionDenied
错误。但感觉这不是“正道”。我尝试制作自定义权限类,但随后未验证数据,因为在序列化程序之前检查了权限类。
您对我应该如何处理这个问题有什么建议吗?
抱歉英语不好,这不是我的母语。 谢谢!
编辑: 例子: 请求数据类似于:
payload = {'organization': 1, 'name': 'Name'}
因此,如果用户来自组织 1 或者他是协调员,则应授予访问权限并应创建 SomeModel
最佳答案
您可以编写自定义权限类HasWritePermissions
,它将检查用户是否具有写入/更新权限。
创建 custom permission class ,您将需要覆盖 BasePermission
类并实现 has_permission()
方法。如果请求被授予访问权限,此方法应返回 True
,否则返回 False
。
class HasWritePermissions(BasePermission):
def has_permission(self, request, view):
# grant access to non-create/update requests
if request.method not in ['POST', 'PUT', 'PATCH']:
return True
# grant access if user is a member of organization of the object
# to be modified or is a coordinator
if (organization in user.organizations) or (user_is_a_coordinator):
return True
# Otherwise don't grant access
return False
关于python - 序列化器中的权限检查,Django 休息框架,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118526/