Django有两种类型的用户,所有者或第二种类型的配置文件权限

时间:2018-03-20 13:17:27

标签: django django-rest-framework

在我的Django REST api中,我有两种类型的用户providerconsumer,每个用户都与来自user的{​​{1}}对象进行一对一关联。我想让所有django.contrib.auth个用户可以阅读consumer个个人资料,而不是provider个用户。读取个人资料的唯一consumer是所有者,他们也应该能够对其进行编辑。

我想制作一个权限类

consumer

所以我不必检查视图中的权限。我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您需要使用object_permission级别。我认为这应该有效:

class ConsumerProfilePermission(BasePermission):
    def has_object_permission(self, request, view, profile):
          if request.method in permissions.SAFE_METHODS:
                // Your Instance of profile must have an attribute named `owner` or replace it with the respective attribute.
                return (request.user.is_provider) or (request.user == profile.owner) or request.user.is_staff
          else:
                return request.user == profile.owner or request.user.is_staff

如果您使用通用视图,那么他们将检查相应的对象级别权限,但如果您正在编写自己的自定义视图,则需要确保自己检查对象级别权限检查。这里在docs解释这个