gpt4 book ai didi

python - 序列化器中的权限检查,Django 休息框架,

转载 作者:行者123 更新时间:2023-11-28 21:46:59 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com