问题描述
如何定义{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 (将#修改为@)