微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将SearchQuerySet限制为仅授权当前用户使用

如何解决将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 举报,一经查实,本站将立刻删除。