如何解决将SearchQuerySet限制为仅授权当前用户使用
如何定义{em>永远包含当前用户有权查看的结果的Haystack SearchQuerySet
?
我的数据库模式具有一组权限,其中包括“机密”查找,以查看用户是否在允许查看每个实例的组中。这些模型都有一个ModelManager来处理:
class ConfidentialModelManager(models.Manager):
def user_has_perm_lookup(self,user):
""" Return a `models.Q` object for lookup by user's permissions. """
filter = models.Q(...)
return filter
def viewable_by_user(self,user):
queryset = super().get_queryset().filter(
self.model.records.user_has_perm_lookup(user))
return queryset
class ConfidentialModel(models.Model):
...
objects = ConfidentialModelManager()
因此,Django ORM现在允许ConfidentialRecord.objects.viewable_by_user()
成为 only 的查询集,用于记录当前请求用户有权查看的记录。
我如何利用它来定义遵守此约束的haystack.query.SearchQuerySet
?
(注意:仅凭零散地定义单个查询以通过此约束进行过滤是不够的;使用完整的SearchQuerySet API将会有很多此类查询。我需要SearchQuerySet类 itself 来拥有该查询约束,无论从中构建什么查询。)
在单独的过程中建立的搜索索引包含所有记录,无论其机密性如何。但是SearchQuerySet
仅需要获取其中的一个子集:与ConfidentialRecord.objects.user_has_perm_lookup(user)
过滤器匹配的子集。怎么样?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。