我试图基于django guardian中用户拥有的对象权限来覆盖get_queryset,这样只有用户拥有权限的对象才是可见的。
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
for item in MyModel.objects.all():
for perm in get_perms(request.user, item):
things_user_can_see = get_objects_for_user(request.user, perm)
return things_user_can_see遗憾的是,这实际上什么也不做,并且所有项目都是可见的,而不管用户拥有什么权限。
发布于 2018-03-04 22:32:59
首先,您需要了解您的视图需要哪些权限。然后,根据这些权限获取对象。
如果你不知道对象的权限,那么你可以通过与模型相关的所有权限来过滤你的对象。
拉取Docs:
from guardian.shortcuts import get_objects_for_user, get_perms_for_model
class MyAdminInline():
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
all_model_perms = get_perms_for_model(MyModel)
return get_objects_for_user(request.user, all_model_perms)仅此而已!无需循环遍历每个对象,检查权限并以错误的方式返回。
https://stackoverflow.com/questions/49096242
复制相似问题