You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅当所有关联消息已发送时允许关闭邮件营销活动?

邮件营销活动关闭权限校验实现

应用管理邮件营销活动时,规则为:仅当所有关联消息均处于已发送状态,才能关闭该活动。

实体定义

// CampaignEntity
class CampaignEntity {
  id: number;
  messages: MessageEntity[];
  status: 'CLOSED' | 'OPEN'
}

// MessageEntity
class MessageEntity{
  id: number;
  status: 'DRAFT' | 'WAITING' | 'SENT'
}

已实现的权限逻辑

目前已支持关闭无关联消息的活动:

can(Close, CampaignEntity, {
  messages: { $size: 0 },
});

需求实现:关闭所有消息已发送的活动

方案1:使用$not + $elemMatch(推荐,若框架支持)

你提到的$not写法完全可行,它通过否定“存在非已发送状态消息”的逻辑,确保所有消息状态都是SENT:

can(Close, CampaignEntity, {
  messages: {
    $not: { $elemMatch: { status: { $ne: 'SENT' } } },
  },
});

方案2:使用$all操作符

如果权限框架支持$all,可以直接指定数组内所有消息的status必须为SENT:

can(Close, CampaignEntity, {
  messages: { $all: [{ status: 'SENT' }] },
});

方案3:使用$nin排除非目标状态

通过排除DRAFT和WAITING两种非已发送状态,间接确保所有消息都是SENT:

can(Close, CampaignEntity, {
  'messages.status': { $nin: ['DRAFT', 'WAITING'] },
});

内容的提问来源于stack exchange,提问作者Martial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:52:38