在安企CMS中,对特定文档(例如付费文档或会员专属内容)实现阅读等级(read_level)控制是一个非常实用的功能,它能帮助我们更好地管理内容权限,实现内容的差异化运营。这个机制不仅灵活,而且与用户体系紧密结合,让我们可以根据用户的身份或付费状态来决定他们可以看到哪些内容。

接下来,我们将一起探索如何在安企CMS中高效地利用 read_level 来实现文档的访问控制。

理解 read_level 的核心机制

安企CMS提供了一个名为 read_level 的参数,它是一个整数值,用来标识文档的最低阅读等级要求。简单来说,数字越大,表示该文档的阅读权限要求越高。当我们在发布文档时,可以为其设置一个 read_level 值。

同时,安企CMS的用户系统也支持用户分组,每个用户分组都可以有一个对应的 level 值。当用户尝试访问一个设置了 read_level 的文档时,系统会比较该文档的 read_level 和当前登录用户所属用户组的 level。只有当用户的 level 大于或等于文档的 read_level 时,用户才能正常阅读文档内容。如果用户的等级不足,或者文档同时设置了 price(价格),用户还需要满足付费条件。

如何设置文档的 read_levelprice

在安企CMS中发布或编辑文档时,你可以通过 archivePublish 接口(或后台界面)来设置文档的 read_levelprice

  • read_level (int, 整数值): 这是文档的阅读等级。
    • 如果设置为 0(默认值),表示该文档对所有用户开放,没有任何阅读等级限制。
    • 如果设置为 123 等,则表示需要用户所属用户组的等级达到或超过这个值才能阅读。
  • price (int, 单位为分): 这是文档的价格。
    • 如果设置为 0(默认值),表示文档是免费的。
    • 如果设置为 100,则表示文档价格为1元(100分)。

举个例子,如果你有一篇文档是专门为VIP会员准备的,而你的VIP会员组的 level10,那么你就可以将这篇文档的 read_level 设置为 10。如果这篇VIP文档还需要额外付费,你也可以同时设置 price

用户侧的访问判断逻辑

当用户尝试查看一篇文档时,前端页面需要与安企CMS的API进行交互,来判断用户是否有权访问。这通常涉及到以下几个步骤和接口:

  1. 获取文档详情: 首先,我们会通过 archiveDetail 接口获取到文档的详细信息,其中包括该文档的 read_levelprice 参数。这是我们进行判断的基础。

  2. 判断是否为付费文档: 如果从 archiveDetail 接口返回的数据中,文档的 price 值大于 0,那么这就意味着这是一篇付费文档。在这种情况下,我们需要进一步调用 archiveOrderCheck 接口,传入文档ID,来检查当前登录用户是否已经为这篇文档支付过费用。

    • archiveOrderCheck 接口会返回 truefalse,表示用户是否已支付。
  3. 获取用户等级信息: 如果文档有 read_level 限制(即 read_level 大于 0),我们需要获取当前登录用户的等级。这通常通过以下两个接口组合实现:

    • 调用 userDetail 接口获取当前登录用户的基本信息,其中会包含 group_id(用户所属用户组ID)。
    • 再调用 userGroupDetail 接口,传入 group_id,获取用户所属用户组的详细信息,其中会包含该用户组的 level 值。
  4. 综合判断访问权限:

    • 如果文档是付费的 (price > 0): 首先检查 archiveOrderCheck 返回的结果。如果未支付,则用户无权阅读,页面可以提示用户购买。如果已支付,则继续检查 read_level
    • 如果文档有等级限制 (read_level > 0): 比较用户所属用户组的 level 和文档的 read_level。如果用户的 level 小于文档的 read_level,则用户无权阅读,页面可以提示用户升级会员。
    • 如果文档没有价格和等级限制(price = 0read_level = 0:则所有用户(包括未登录用户)都可以直接阅读。

细致到自定义字段的访问控制

安企CMS的文档模型(Model)功能还提供了一个非常强大的选项,允许你对文档中的自定义字段也设置访问权限。在 moduleDetail 接口返回的模型字段信息中,你会看到一个 follow_level 参数。如果某个自定义字段的 follow_level 设置为 true,那么这个字段的内容将自动遵循文档本身的 read_level 限制。

这意味着,你可以让文档中的某个特定信息块,比如一份详细的报告下载链接,或者一个联系方式,只在用户满足特定 read_level 条件时才显示。在前端获取文档详情时,archiveDetail 接口会通过 extra 参数返回这些自定义字段的数据。你只需要解析 extra 中的数据,并根据字段的 follow_level 状态以及前面提到的用户等级和文档 read_level 逻辑,来决定是否展示该自定义字段的内容。

前端实现的关键步骤概览

为了给用户提供流畅的体验,前端页面在加载文档时,可以按照这样的逻辑来组织代码:

  1. 页面加载时,通过 archiveDetail 接口请求文档 ID 或文件名来获取文档的详细信息。
  2. 在获取到的文档详情中,检查 priceread_level 的值。
  3. 如果用户已登录,获取其 userId,并通过 userDetailuserGroupDetail 接口获取当前用户的 level
  4. 根据以下优先级进行判断:
    • 如果 document.price > 0 且用户未支付(调用 archiveOrderCheck 确认),则显示购买提示,隐藏文档内容。
    • 否则,如果 document.read_level > 0user_level < document.read_level,则显示会员升级提示,隐藏文档内容。
    • 否则,用户拥有阅读权限,正常显示文档内容。
  5. 对于文档 extra 中的自定义字段,如果其 follow_level 属性为 true,则同样应用上述 read_level 检查逻辑来决定是否显示该字段内容。

通过这样的组合使用,你就可以在安企CMS中灵活地实现对文档的阅读等级控制,无论是创建付费阅读内容、会员专享文章,还是对文档的特定部分进行权限管理,都能轻松应对。


常见问题 (FAQ)

1. read_level 的默认值是多少?当文档的 read_level 为0时,意味着什么? read_level 的默认值是 0。当文档的 read_level 设置为 0 时,表示该文档对所有用户开放,无论用户是否登录,也无论其所属用户组的 level 是多少,都可以无限制地访问和阅读文档内容。

**2. 如何在安企CMS