0

我正在实现一个搜索功能,该功能返回用户可以通过他们的组访问的页面。页面在编辑时通过 Wagtail 管理页面隐私设置设置这些设置。

例如,页面只能对 Editors 组中的用户可见。因此,当不在编辑组中的用户搜索此页面时,应将其过滤掉。

如何以这种方式有效地过滤用户无法访问的页面?我找不到任何明确的方法来做到这一点。

4

1 回答 1

0

为了搜索引擎优化的目的回答我自己的问题。

在研究了 Wagtail 源代码后,我发现 Wagtail 在PageViewRestriction内部使用了一个模型。

我最终使用这个片段来解决我的问题:

from wagtail.core.models import Page, PageViewRestriction

def filter_pages(user):
    pages = Page.objects.live()

    # Unauthenticated users can only see public pages
    if not user.is_authenticated:
        pages = pages.public()
    # Superusers can implicitly view all pages. No further filtering required
    elif not user.is_superuser:
        # Get all page ids where the user's groups do NOT have access to
        disallowed_ids = PageViewRestriction.objects.exclude(groups__id=user.groups.all()).values_list("page", flat=True)
        # Exclude all pages with disallowed ids
        pages = pages.exclude(id__in=disallowed_ids)

    return pages
于 2019-10-01T18:53:15.943 回答