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

时间:2016-05-09 14:35:30

标签: python django django-rest-framework django-permissions django-serializer

我是相当新的django休息框架,我对权限有一些疑问。

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

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

对于自己的组织,用户只能create / update SomeModel,如果他是“协调员”组,他也可以create / update任何组织。

目前,我的方法是使用.create().update()方法检查序列化程序中的这些条件,因为数据已经过验证,我在那里引发PermissionDenied错误。但感觉这不是“正确的方式”。我尝试制作自定义权限类,但之后数据未经过验证,因为在序列化程序之前会检查权限类。 您有什么建议我应该怎么做?

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

修改 例: 请求数据类似于:

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

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

1 个答案:

答案 0 :(得分:5)

您可以编写自定义权限类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 
相关问题