【问题标题】:Limit the images an editor in the wagtail admin sees to only those they uploaded?将 wagtail 管理员中的编辑器只能看到他们上传的图像?
【发布时间】:2019-04-27 10:29:42
【问题描述】:

我设置了 Wagtail 管理员,以便编辑者只能添加和编辑他们创建的博客页面。问题是当使用图像选择器选择图像时,他们能够看到上传到网站的每张图像。我需要他们只看到他们上传的图片。

我的网站已设置好,以便我的目标受众可以使用 django-allauth 注册一个帐户。注册后,它们会自动分配给自定义的“作者”组。作者可以添加“个人资料”页面,然后添加任意数量的“故事”或文章。 Stories 是 profile 的子子项,因此 URL 如下所示:website.com/some_user/some_user_story。

这很有效,因为“作者”也只能创建、编辑和查看我想要的页面。但是,当通过图像选择器将图像添加到他们的故事页面时,他们会显示“作者”集合中的每张图像。这是行不通的,因为他们只能看到他们上传的图片。

据我了解,我所需要的东西并未得到官方的开箱即用支持。然而,我检查了数据库表,wagtailimages_image 表确实跟踪了 uploaded_by_user_id

是否有我可以重写的类、方法、钩子或信号来拦截和查询数据库以创建所需的行为?

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    确实已经为此设置了一个钩子。我最终实现了construct_image_chooser_queryset 钩子。文档在这里:http://docs.wagtail.io/en/v2.5/reference/hooks.html#construct-image-chooser-queryset

    在项目中,我有一个名为“仪表板”的应用程序,其中包含用于自定义 Wagtail 管理员的所有代码。在那个应用程序中,我创建了一个 wagtail_hooks.py 文件并添加了以下代码:

    # Filter images in the image_chooser based on user
    @hooks.register('construct_image_chooser_queryset')
    def filter_images_by_user(images, request):
        images = images.filter(uploaded_by_user=request.user)
    
        return images
    

    最后,我为“作者”组创建了一个新的图像集。然后在“作者”组设置中添加该图像集并为其分配“添加”权限。

    现在,当用户添加照片或使用图片选择器时,他们只能看到自己上传的图片。

    【讨论】:

    • 是的,我有类似的要求,这个钩子与选择器配合得很好。您使用“添加”权限的技巧有效。图片库的工作方式是用户无需任何权限即可查看/编辑/删除他/她拥有的所有图片。 “添加”权限允许用户添加图像。 “编辑”意味着您可以编辑任何图像,而不仅仅是您的(这可能会造成混淆),这就是为什么不应该检查作者角色的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多