在我的Django REST api中,我有两种类型的用户provider
和consumer
,每个用户都与来自user
的{{1}}对象进行一对一关联。我想让所有django.contrib.auth
个用户可以阅读consumer
个个人资料,而不是provider
个用户。读取个人资料的唯一consumer
是所有者,他们也应该能够对其进行编辑。
我想制作一个权限类
consumer
所以我不必检查视图中的权限。我应该怎么做呢?
答案 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解释这个