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

permissions checking in serializer, Django rest framework,

我是 django rest 框架的新手,我有一些关于权限的问题。

所以我有一个用户是组织成员和某个组的成员。 假设我们有一个模型:

class SomeModel:
    organization = models.ForeignKey(Organization)
    name = models.CharField()

用户只能create / update SomeModel 为自己的组织,如果他是一组 "Coordinators" 他也可以 create / update 对于任何组织。

目前我的方法是在 .create().update() 方法中检查序列化程序中的这些条件,因为数据已经过验证并且我在那里提出 PermissionDenied 错误。不过感觉这不是"the right way"。我尝试创建自定义权限 类,但随后未验证数据,因为在序列化程序之前检查了权限 类。 您对我应该如何处理这个问题有什么建议吗?

抱歉英语不好,这不是我的母语。 谢谢!

编辑: 例子: 请求数据类似于:

payload = {'organization': 1, 'name': 'Name'} 

因此,如果用户来自组织 1 或者他是协调员,则应授予访问权限并应创建 SomeModel

您可以编写自定义权限classHasWritePermissions,它将检查用户是否具有write/update权限。

要创建 custom permission class,您需要覆盖 BasePermission class 并实施 has_permission() 方法。如果请求被授予访问权限,此方法应该 return 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