我正在使用 django-guardian 在我的 Django 项目中实现每个对象的权限。我遇到了注册用户无法查看匿名用户能够查看的对象的问题。我曾认为如果匿名用户有权限,那么注册用户应该有相同的权限(我无法想象我的网站的一部分我希望匿名用户能够做某事而注册用户不能做某事)。
from core.models import MyObject
from django.contrib.auth.models import User
from guardian.shortcuts import
from guardian.utils import get_anonymous_user
m = MyObject.objects.get(id=1)
u = User.objects.get(username="MyUser")
anon = get_anonymous_user()
anon.has_perm('view_object', m)
# ^ Prints True
u.has_perm('view_object', m)
# ^ Prints False
在我的项目中,我有一些可以是“公共”或“私有”的对象。当用户将对象标记为“公共”时,我将“view_object”权限授予匿名用户。我的视图使用 保护PermissionRequiredMixin
,如下所示:
class MyObjectDetailsView(PermissionRequiredMixin, DetailView):
model = MyObject
permission_required = 'view_object'
Django Guardian 是否提供某种方式为注册用户提供与匿名用户相同的权限?或者,如果用户没有权限但匿名用户有权限,是否有某种方法可以对 PermissionRequiredMixin 进行子类化以允许该操作?