我很难理解django-守护者函数get_objects_for_user的行为。我正在分配组对象权限,但这些权限似乎不存在于get_objects_for_user。
>>> u = User.objects.get(username='angus')
>>> u.has_perm('news.change_news', n)
True
>>> from guardian.shortcuts import get_objects_for_user
>>> get_objects_for_user(u, (u'news.change_news', ))
[]
>>> get_objects_for_user(u, ('change_news'), klass=News)
[]不过,这些文档似乎相当清楚:
get_objects_for_user: (user, perms, klass=None, use_groups=True, any_perm=False)
Returns queryset of objects for which a given ``user`` has *all*
permissions present at ``perms``.我甚至不知道从哪里开始调试。有什么建议吗?
更新:
我的模型定义如下:
class News(models.Model):
departments = models.ManyToManyField(Department, blank=True, related_name='news', through='NewsDepartmentMembership')
research_groups = models.ManyToManyField(Group, blank=True, related_name='news', through='NewsGroupMembership')
people_involved = models.ManyToManyField(Person, blank=True, related_name='news')
related_news = models.ManyToManyField('News', blank=True)
title = models.CharField(_('Title'), max_length=255)
slug = models.SlugField(_('Slug'), unique_for_date='pub_date',)
excerpt = models.TextField(_('Excerpt'), blank=True)
content = models.TextField(_('Content'), blank=True)
is_published = models.BooleanField(_('Published'), default=False)
pub_date = models.DateTimeField(_('Publication date'), default=datetime.datetime.now)
is_feat = models.BooleanField(_('Featured'), default=False)
published = PublishedNewsManager()
objects = models.Manager()
featured = FeaturedNewsManager()发布于 2013-10-18 07:36:44
这样使用: news = get_objects_for_user(u,('change_news'),klass=News)
编辑:很容易找出问题所在:尝试使用guardian.shortcuts.get_perms (http://pythonhosted.org/django-guardian/api/guardian.shortcuts.html#get-perms)查看用户和对象之间的权限是否真的存在。不久前,我遇到了类似的问题,如果我没记错的话,那么这与用户对超级用户的依赖有关。尝试为用户设置is_superuser false,并查看has_perm是否仍然返回true。
此外,如果可能的话,我建议您不要在项目变得更大时使用get_objects_for_user快捷方式。当您在数据库中获得更多的对象/权限时,它的查询非常缓慢。
艾伦
https://stackoverflow.com/questions/19438275
复制相似问题