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

vov*_*man 6 admin access-control liquid shopify

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

kyl*_*rns 14

如果您以管理员身份登录,则在呈现{{ 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 %}
Run Code Online (Sandbox Code Playgroud)

注意:我注意到Shopify管理栏始终没有填充(我认为这是一个错误).如果您的Shopify管理栏未在您的实例上填充,则无效.


hjb*_*lok 7

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

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

{% if customer.tags contains "admin" %}
Run Code Online (Sandbox Code Playgroud)

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

{% if customer.tags contains "admin" and product.tags contains "admin" %}
  <!-- render product -->
{% else %}
  <!-- do nothing -->
{% endif %}
Run Code Online (Sandbox Code Playgroud)


小智 6

刚刚想出了这个有效的方法。(与旧方法基本相同,只是另一种方式!)

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

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

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

{% if content_for_header contains 'designMode' %}
   <script>
     console.log("You're an admin in design mode!");
   </script>
{% endif %}
Run Code Online (Sandbox Code Playgroud)


csa*_*ers 0

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

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

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