7

我想创建一个可以在 Shopify 的店面中使用但只有商店管理员可以访问的产品。有没有办法通过液体识别当前用户是否是管理员?或者有没有其他解决方案。谢谢!

4

6 回答 6

15

如果您以管理员身份登录,则在呈现{{ content_for_header }}包含时,它将包含一些 JavaScript 以将页面内容向下推送,以便为 Shopify 管理栏腾出空间。

我们可以利用capture{{ content_for_header }}代码存储为液体变量,然后使用contains运算符检查admin_bar_iframe变量中是否存在。

{% capture CFH %}{{ content_for_header  }}{% endcapture %}{{ CFH }}

{% if CFH contains 'admin_bar_iframe' %}
    {% assign admin = true %}
{% endif %}

{% if admin %}
    <!-- User is an admin -->
{% else %}
    <!-- User is not an admin -->
{% endif %}

注意:我注意到 Shopify 管理栏并非始终填充(我认为这是一个错误)。如果您的 Shopify 管理栏没有填充到您的实例上,这将不起作用。

于 2015-06-17T20:50:24.953 回答
6

刚刚发现这种方法有效。(基本上与旧方法相同,只是另一种方式!)

检测登录的管理员查看站点:

{% if content_for_header contains 'adminBarInjector' %}
   <script>
     console.log("You're a logged in admin viewing the site!");
   </script>
{% endif %}

在设计模式下检测管理员:

{% if content_for_header contains 'designMode' %}
   <script>
     console.log("You're an admin in design mode!");
   </script>
{% endif %}
于 2018-09-30T22:55:55.173 回答
4

另一种方法是使用Customer Accounts。Liquid 提供了一个{{ customer }}对象,该对象仅在用户(客户)登录时出现。

您可以将特定标签添加到管理员用户并使用 Liquid 来验证标签是否存在:

{% if customer.tags contains "admin" %}

当然,您需要将您的产品标识为“仅限管理员”,例如使用标签:

{% if customer.tags contains "admin" and product.tags contains "admin" %}
  <!-- render product -->
{% else %}
  <!-- do nothing -->
{% endif %}
于 2013-07-05T07:21:06.213 回答
3

编辑:自从 Shopify 更新以来,这似乎不再起作用。


我知道这已经晚了,但这是我用过的,它在我的测试中工作正常。这改编自之前的答案,但允许用于自定义主题选项等。

{% capture CFH %}{{ content_for_header }}{% endcapture %}{{ CFH }}

{% assign isAdmin = true %}

{% if CFH contains '"__st"' %}
    {% if CFH contains 'admin_bar_iframe' %}{% else %}
        {% assign isAdmin = false %}
    {% endif %}
{% endif %}
于 2017-04-19T07:57:18.887 回答
2

这是上面 kyle.stearns 提供的更完整的版本(我不能评论它,因为它是新的)。管理栏不加载的主要实例之一是预览主题时。这是我使用的修改后的代码(2018 年 6 月更新 - Shopify 编辑了我们预览主题的方式):

  {% capture CFH %}{{ content_for_header  }}{% endcapture %}

{% if CFH contains 'admin_bar_iframe' %}
{% assign admin = true %}
{% elsif CFH contains 'preview_bar_injector-' %}
{% assign admin = true %}
{% endif %}

{% if admin %}
<!-- User is an admin -->
<script>
  alert ("do some work");
</script>
{% else %}
<!-- User is not an admin -->
<script>
  alert ("please buy some stuff");
</script>
{% endif %}

如果您使用的是 Plus,那么您还可以通过 api 访问用户

于 2017-02-13T11:32:11.173 回答
0

目前没有。您也许可以尝试检查 cookie 和其他东西,看看是否有一些识别信息可以让您知道用户是否是管理员,但它会很脆弱。

这也需要渲染项目,但通过 CSS 隐藏它们。然后,您将在运行检查后使用 JS 向他们展示。

如前所述,这可能真的很脆弱。

于 2013-07-04T13:00:23.393 回答