Strapi多租户API:如何关联Email Designer插件模板至内容管理器?
解决方案:Strapi Email Designer 模板接入内容管理器及多租户关联设置
一、将Email Designer插件表接入内容管理器
Strapi允许通过扩展插件配置,把第三方插件的内容类型暴露到内容管理器中,步骤如下:
- 创建/编辑插件扩展文件
在项目根目录下创建./src/extensions/email-designer/strapi-server.js(路径不存在则手动新建),写入以下代码:
module.exports = (plugin) => { // 让邮件模板在内容管理器中可见 plugin.contentTypes['email-template'].config = { ...plugin.contentTypes['email-template'].config, visible: true, }; // 开放模板的CRUD权限给管理员角色 if (plugin.permissions) { const templatePermissions = plugin.permissions.controllers['email-template']; templatePermissions.find.enabled = true; templatePermissions.findOne.enabled = true; templatePermissions.create.enabled = true; templatePermissions.update.enabled = true; templatePermissions.delete.enabled = true; } return plugin; };
- 重启Strapi服务
重启后,你就能在内容管理器左侧菜单看到Email Template入口,直接在面板中管理所有邮件模板,无需硬编码端点。
二、建立Tenant与Email Template的关联字段
要实现租户与模板的动态关联,只需在Tenant内容类型中添加关联字段:
- 编辑Tenant的Schema配置
打开./src/api/tenant/content-types/tenant/schema.json,在attributes节点下添加关联字段:
{ "attributes": { // 保留原有字段... "emailTemplate": { "type": "relation", "relation": "oneToOne", "target": "plugin::email-designer.email-template" } } }
- 若一个租户需要关联多个模板,可将
relation改为oneToMany;若多个租户共用一个模板,改为manyToOne。
重启Strapi服务
重启后进入Tenant的编辑页面,会出现一个下拉选择框,直接选择已创建的Email Designer模板即可完成关联,无需手动输入templateId。API中获取关联模板
在业务代码中,通过关联字段直接拉取模板内容:
const targetTenant = await strapi.db.query('api::tenant.tenant').findOne({ where: { id: 租户ID }, populate: ['emailTemplate'], }); // 使用关联的模板发送邮件 const templateContent = targetTenant.emailTemplate;
注意事项
- 确保Email Designer插件版本与当前Strapi版本兼容,部分旧版本可能需要调整扩展代码逻辑。
- 权限设置需精细化,避免普通角色误操作其他租户的邮件模板。
- 多租户场景下,建议给Email模板添加
tenantId字段做数据隔离,或配合Strapi多租户插件实现租户数据隔离。
内容的提问来源于stack exchange,提问作者Strife86
相关产品推荐
相关产品推荐

