oofbar/membership

根据用户的商务订阅提供特殊访问权限。

安装: 549

依赖: 0

建议者: 0

安全: 0

星星: 3

观察者: 3

分支: 0

开放问题: 4

类型:craft-plugin

2.0.2 2023-05-01 15:29 UTC

This package is auto-updated.

Last update: 2024-09-30 01:19:58 UTC


README

根据用户的 商务订阅 提供特殊访问权限。

该会员插件通过监听 Craft Commerce 中的关键 订阅事件 来工作,并根据控制面板中配置的规则或“授权”将订阅者移动到(或从)组中。

其中很大一部分可以在针对您应用程序的特定模块中实现——此插件主要面向需要基于活跃订阅简单授予访问权限的系统,并且不希望自行维护该逻辑的用户。

该插件处理订阅的创建、取消和到期,以及计划的切换。目前,它不支持基于“试用期”的特殊访问或限制。

要求

此插件需要 Craft CMS 4 和 Commerce 4。 版本 1.x 与 Craft 3 和 Commerce 3 兼容。

警告 要使订阅正常工作,您必须配置 Stripe webhooks!Stripe 提供了一个出色的 CLI,可以帮助 在开发环境中转发 webhooks

从 Membership 1.x 升级

2.x 升级应无需手动干预,但始终重要的是要测试您的应用程序以确保一致性。

如果您使用过任何内部功能,请注意以下一些重要更改

  • oofbar\membership\controllers\BaseController 已被删除。它实现的便利功能已集成到 Craft 4 中。
  • oofbar\membership\controllers\BaseCpControlleroofbar\membership\controllers\BaseAdminController 已被删除。权限检查现在在各个控制器中执行。
  • oofbar\membership\controllers\LogsController 已被删除,因为它从未使用过。
  • 自定义权限(membership-manageGrantsmembership-viewLogs)已被删除,因为它们从未被检查。访问权限已合并到 admin 用户。

安装

要安装插件,请按照以下说明操作(或只需在 Craft 插件商店 中搜索“Membership”)

  1. 打开您的终端并转到您的 Craft 项目

    cd /path/to/project
  2. 然后告诉 Composer 加载插件

    composer require oof-bar/membership -w
  3. 在控制面板中,转到设置→插件,点击 Membership 的“安装”按钮,或运行

    php craft plugin/install membership

详细信息

每个 授权 都是一种政策或规则,用于指定哪些计划映射到哪些 用户组。默认情况下,插件不执行任何操作——如果没有配置授权,它不会对用户权限做出任何更改。

由于会员功能是针对用户组(而不是权限,直接)操作的,因此最好首先设计一个合理的基于组的权限结构——例如,如果您的组织有 青铜 支持等级,您可能会创建三个用户组,并将相关权限分配给每个组。

您可以为每个计划创建多个授权——例如,如果您想以累加的方式组织权限,您可以授予 支持者访问所有三个组的权限。这样,您可以确保授予较低支持等级的好处总是会向上冒泡到较高的等级。

插件永远不会从由其他活跃订阅授权的组中删除用户:如果 计划 A计划 B 都将用户移入 组 1,但 计划 B 还会将用户添加到 组 2,如果用户的 计划 A 订阅仍然有效,则取消 计划 B 的订阅不会从 组 1 中删除用户。

注意更改授权的配置将 不会 更新现有用户的组。

用法

所有配置都通过控制面板进行。转到 设置 部分,然后点击 会员 图块来管理 授权

注意授权不存储在项目配置中,因此必须在每个环境中进行配置。这是 Commerce 的当前一个 限制。您可能需要直接导航到生产环境中的设置页面——路径始终是 settings/membership/grants

前端

在您的模板中,您可以使用正常的 Craft 用户方法来检查某人是否具有特定的访问级别

{% if currentUser.isInGroup('membersBronze') %}
    <p>Thank you for your support! You have access to our entire lesson catalog.</p>
{% endif %}

除了检查组之外,您还可以直接检查权限:例如,如果用户拥有的订阅不如他们是否具有某种能力重要,您可以使用 .can() 方法

{% set section = craft.app.sections.getSectionByHandle('classifieds') %}

{% if currentUser.can("createEntries:#{section.uid}") %}
    You’re ready to <a href="{{ url('account/classifieds/new') }}">create a listing</a>!
{% endif %}

警告通过组自动管理用户权限可能会很危险。请考虑为审查和部署项目权限方案的变化定义一个 流程或策略

审计

会员内置了一个轻量级日志系统,以便商店管理员可以了解插件正在做什么。{{%membership_logs}} 表跟踪插件采取的任何操作(成功和失败),相关日志将在订阅的编辑页面上输出(自 Commerce 3.0.11 以来)。

可扩展性

Craft 和 Yii 提供了一个丰富的 事件 系统,以帮助开发人员更改内置和“可插拔”功能的行为。

Membership 发射两个事件:一个是在权限即将被授权之前,另一个是在权限即将被撤销时。

Permissions::EVENT_BEFORE_GRANT_PERMISSION

在将用户授予用户组之前触发。这不是在由于用户已在给定组中而未授予权限时发出的。

use yii\base\Event;

use oofbar\membership\services\Permissions;
use oofbar\membership\events\GrantPermission as GrantPermissionEvent;

Event::on(
    Permissions::class,
    Permissions::EVENT_BEFORE_GRANT_PERMISSION,
    function (GrantPermissionsEvent $e) {
        // Optionally: prevent the grant from occurring, based on some criteria!
        $e->isValid = false;
    });

Permissions::EVENT_BEFORE_REVOKE_PERMISSION

在用户即将从用户组中移除之前触发。这不是在授权会从用户不在的组中移除用户时发出的。相反,会员创建一个反映此状态的日志消息。

use yii\base\Event;

use oofbar\membership\services\Permissions;
use oofbar\membership\events\RevokePermission as RevokePermissionEvent;

Event::on(
    Permissions::class,
    Permissions::EVENT_BEFORE_REVOKE_PERMISSION,
    function (RevokePermissionsEvent $e) {
        // Optionally: prevent the revocation from occurring, based on some criteria!
        $e->isValid = false;
    });

🌳