根据组覆盖用户配置文件模板

我正在尝试创建一个主题组件,该组件根据所查看用户的组成员身份来覆盖用户配置文件模板。我希望匿名用户的个人资料根本不显示“#user-content”区域,除非当前用户是工作人员。我已经创建了一个匿名用户会自动添加到的组,但我在有条件地覆盖模板时遇到了一些麻烦。

根据使用主题覆盖 Discourse 模板为某些用户配置文件添加背景视频,我尝试像这样覆盖 user/summary.hbs:

<script type="text/discourse-plugin" version="0.8">
    const TARGET_GROUP = "anon"

  api.registerConnectorClass('above-user-summary-stats', 'user-summary', {
    setupComponent(args, component) {
      const inGroup = [...args.model.groups].filter(g => g.name === TARGET_GROUP)
      const isAnon = inGroup.length ? true : false;
      component.setProperties({isAnon})
    }
  });

</script>

<script type="text/x-handlebars" data-template-name="user/summary">
    <DSection @pageClass="user-summary" @tagName="">
    <div class="user-content" id="user-content">
      <PluginOutlet
        @name="above-user-summary-stats"
        @args={{hash model=this.model user=this.user}}
      />
      {{log isAnon}}
      
    </div>
</DSection>
</script>

这会覆盖所有配置文件的模板,但 isAnon 未定义,所以我认为我没有理解如何在覆盖时创建供 handlebars 检查的逻辑,而不是添加到插件出口。

registerConnectorClass 是否适用于此?这里是否需要模板覆盖?我已经查看了插件 API 和 User.rb,并弄清楚了如何检查当前用户是否处于匿名模式,但除了组之外,我没有找到任何可以轻松访问的来检查所查看用户是否是匿名的。我熟悉 Rails、js 和 handlebars,但我是 Ember 和 Discourse 的新手。

1 个赞

如果其他人看到此内容,我最终的做法是覆盖 user、user/summary 和 user/activity 的模板,通过在我不希望已登录用户看到的部分周围添加 {{#if (or viewingSelf currentUser.staff)}} 来实现。这会覆盖所有用户的个人资料模板,而不仅仅是指定组中的用户,但我认为这对于我的用例来说已经足够了,可以给用户更多的通用隐私。我制定的模板仍然允许用户选择置顶一个主题,但会隐藏所有其他摘要统计信息、主题和活动,除非用户自己和工作人员查看。

我的用例与这个关于课堂匿名模式的主题类似,即希望有一种易于访问的方式,让用户或管理员能够更精细地控制即使对于已登录用户,个人资料的哪些部分可以显示或隐藏。例如,在一个健康支持小组论坛中,希望匿名账户在 anon 组中,然后配置为不向 anon 组显示活动页面或选项卡。

1 个赞