在日常网站运营中,我们常常会遇到这样的需求:有些内容希望所有人都能看到,而有些则只对特定的会员开放,或者针对不同等级的用户展示不同的信息。安企CMS(AnQiCMS)提供了强大的用户组权限管理功能,让我们能够灵活地控制网站内容的可见性,实现内容的“千人千面”。

为什么需要按用户组显示或隐藏内容?

想象一下,你运营着一个提供多种服务的网站,其中包含免费的基础文章、付费的深度报告,以及仅供高级会员观看的独家教程。如果没有用户组权限功能,这些内容就无法有效区分受众,要么全部公开导致付费内容贬值,要么全部隐藏流失潜在用户。安企CMS的用户组管理和VIP系统,正是为了解决这一痛点,帮助我们实现内容变现、提升用户粘性,并提供个性化的浏览体验。

安企CMS如何识别用户和内容权限?

安企CMS通过“用户组等级”和“内容阅读等级”这两个核心概念,巧妙地构建了内容权限体系。

  1. 用户组等级:在安企CMS后台,我们可以创建不同的用户组,例如“访客”、“注册用户”、“VIP会员”、“高级VIP”等。每个用户组都可以被赋予一个特定的“等级”,通常是一个数字,等级越高代表权限越大。比如,访客可能是0级,注册用户1级,VIP会员5级,高级VIP10级。

  2. 内容阅读等级(ReadLevel):当我们发布或编辑文章、产品等内容时,安企CMS允许我们为这些内容设置一个“阅读等级”。这个等级就决定了哪些用户组有权限查看此内容。如果一篇文章的阅读等级设置为5,那么只有用户等级达到5或高于5的用户才能完整浏览。

通过这种方式,系统在用户访问内容时,会自动比较用户的等级和内容的阅读等级,从而决定是显示完整内容,还是提示用户权限不足。

在后台设置内容阅读权限

在安企CMS的后台管理界面,设置内容阅读权限是一个相对直观的过程。

当我们创建或编辑一篇文档(无论是文章还是产品)时,在编辑页面的“其他参数”部分,会找到一个名为“阅读等级”的选项。在这里,我们可以根据内容的重要性、价值以及目标受众,为当前内容指定一个阅读等级。例如,一篇普通新闻可以设置为0级,表示所有人可见;一篇深度研究报告可以设置为5级,仅限VIP会员查看;而一份内部资料可能设置为10级,只有最高级别的用户才能访问。

在前端模板中实现内容的显示与隐藏

前端模板是用户最终看到网站内容的地方,也是我们根据用户组权限实现内容动态展示的关键。安企CMS的模板标签体系,特别是userDetailuserGroupDetailarchiveDetail这些标签,让这一过程变得非常灵活。

通常,我们会采取以下步骤来判断并显示内容:

  1. 获取当前登录用户的等级: 首先,我们需要知道当前访问网站的用户是谁,以及他所属的用户组等级是多少。在安企CMS的模板中,我们可以通过userDetail标签获取当前用户的基本信息,包括他所属的用户组ID。接着,再利用userGroupDetail标签,根据用户组ID来获取该用户组的具体等级。如果用户没有登录,我们可以将其视为默认的“访客”等级(例如0级)。

    一个大致的逻辑可能像这样:

    {% userDetail currentUser with name="Id" %}
    {% set userIsLoggedIn = (currentUser > 0) %}
    {% set currentUserId = currentUser %}
    
    
    {% set currentUserLevel = 0 %} {# 默认访客等级为0 #}
    {% if userIsLoggedIn %}
        {% userDetail currentGroupId with name="GroupId" id=currentUserId %}
        {% userGroupDetail userGroupInfo with name="Level" id=currentGroupId %}
        {% set currentUserLevel = userGroupInfo %} {# 获取实际用户等级 #}
    {% endif %}
    
  2. 获取当前内容的阅读等级: 对于正在访问的特定内容(例如文章详情页),我们可以使用archiveDetail标签来获取该内容所设置的“阅读等级”(ReadLevel)。

    {% archiveDetail contentReadLevel with name="ReadLevel" %}
    {# contentReadLevel 现在存储着当前内容的阅读等级 #}
    
  3. 根据等级比较,实现条件显示: 现在,我们有了当前用户的等级和内容的阅读等级,就可以使用if逻辑判断标签来决定如何展示内容了。

    在文章详情页,假设我们需要判断用户是否有权查看文章的完整内容:

    {% if currentUserLevel >= contentReadLevel %}
        {# 用户等级满足,显示完整内容 #}
        {% archiveDetail articleContent with name="Content" %}
        {{ articleContent|safe }}
    {% else %}
        {# 用户等级不足,显示提示信息或部分内容 #}
        <div class="restricted-content-message">
            <p>此内容为付费或会员专属,您的当前等级不足,请<a href="/login">登录</a>或<a href="/upgrade-vip">升级VIP</a>查看。</p>
            {# 也可以显示一些简介或摘要 #}
            {% archiveDetail articleDescription with name="Description" %}
            <p>{{ articleDescription }}</p>
        </div>
    {% endif %}
    

同样地,在内容列表页,虽然我们可能无法直接在archiveList标签中筛选掉不符合权限的内容,但可以在循环遍历每一篇文章时,对每篇文章进行权限判断,然后决定是显示文章标题和链接,还是显示一个“VIP专属”的提示。

例如,在一个文章列表中: “`twig {% archiveList archives with type=“page” limit=“10” %}

{% for item in archives %}
    <li>
        {% if currentUserLevel >= item.ReadLevel %}
            {# 用户等级满足,显示文章标题和链接 #}
            <a href="{{item.Link}}">{{item.Title}}</a>
            <p>{{item.Description}}</p>