如何检查当前访客是否是商店的管理员?

时间:2013-07-04 12:56:38

标签: admin shopify access-control liquid

我想创建一个可在Shopify商店中使用的产品,但只能由商店管理员访问。无论如何要确定当前用户是否是通过液体的管理员?还是有任何其他解决方案可以应对这一挑战。谢谢!

6 个答案:

答案 0 :(得分:13)

如果您以管理员身份登录,则在呈现{{ 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管理栏没有填充到您的实例上,则无效。

答案 1 :(得分:4)

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

您可以向管理员用户添加特定标签,并使用液体来验证是否存在标签:

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

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

{% if customer.tags contains "admin" and product.tags contains "admin" %}
  <!-- render product -->
{% else %}
  <!-- do nothing -->
{% endif %}

答案 2 :(得分: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 %}

答案 3 :(得分:3)

只需弄清楚这种方法是行得通的。 (与旧方法基本相同,只是另一种方法!)

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

{% 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 %}

答案 4 :(得分:2)

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

<div>
  <span>  
    <img src="https://i.stack.imgur.com/iYFJA.png">
  </span>
</div>

如果您正在使用Plus,那么您还可以访问User via api

答案 5 :(得分:0)

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

这还需要渲染项目,但是通过CSS隐藏它们。然后你在运行支票后用JS显示它们。

如上所述,这可能非常脆弱。