Strapi 策略与自定义入门指南
简介
Strapi 是一个用于构建后端应用程序的无头内容管理系统(Headless CMS)。通过掌握 JavaScript 编程知识,您可以利用 Strapi 提供的策略、中间件、控制器、服务、模型和 Webhook 来自定义后端功能。
本文将深入讲解 Strapi 策略的基础知识,并展示如何在实际项目中使用它们。让我们开始吧!
策略概述
在后端开发中,策略(Policy)是一种用于定义请求规则的功能。它可以在请求进入服务器之前进行检查,确保请求符合预设规则。简单来说,策略就像银行的安检系统,只有通过检查的请求才能进入服务器。
在 Strapi 中,策略的主要作用是控制请求的访问权限。您可以根据需求创建以下三种类型的策略:
- 全局策略:适用于整个项目,没有特定范围。
- API 策略:仅适用于特定 API。
- 插件策略:仅限于特定插件使用。
策略的核心逻辑是返回布尔值:
- 返回
true:允许请求进入服务器。 - 返回
false:拒绝请求。
全局策略
全局策略适用于整个项目,以下是初始化全局策略的步骤:
初始化全局策略
-
运行以下命令:
yarn strapi generate -
按照提示选择:
- 策略(Policy)。
- 输入策略名称,例如
first-policy。 - 选择将策略添加到项目的根目录。
完成后,策略文件会自动生成在 src/policies 文件夹中。例如,创建的 first-policy 文件路径为:
src/policies/first-policy.js
测试全局策略
为了测试策略,我们需要创建一个基本的内容类型。以下是具体步骤:
步骤 1:创建内容类型
-
打开 内容类型生成器。
-
点击 + 创建新的集合类型。
-
输入名称
Item,并添加以下字段:- 名称:数据类型为文本,字段名为
name。 - 代码:数据类型为文本,字段名为
code。 - 价格:数据类型为数字,字段名为
price。
- 名称:数据类型为文本,字段名为
-
保存内容类型并发布至少一条数据。
步骤 2:配置路由
- 打开 设置 > 用户与权限 > 角色。
- 选择 公共角色,勾选
Item的所有权限(获取、添加、修改和删除)。 - 保存更改。
完成后,您可以通过以下 URL 测试 API:
http://localhost:1337/api/items
注册全局策略到路由
要将全局策略应用到路由,请编辑以下文件:
src/api/item/routes/item.js
在 createCoreRouter 中添加策略配置。完成后,发起请求即可在控制台中看到策略的日志输出。
API 策略
创建 API 策略的步骤:
初始化 API 策略
-
运行以下命令:
yarn strapi generate -
按照提示选择:
- 策略(Policy)。
- 输入策略名称,例如
second-policy。 - 选择将策略添加到现有 API,例如
Item。
生成的策略文件路径为:
src/api/item/policies/second-policy.js
注册 API 策略到路由
编辑以下文件:
src/api/item/routes/item.js
在 createCoreRouter 中添加 second-policy 策略。完成后,发起请求即可验证策略的执行情况。
插件策略
插件策略适用于特定插件,例如 Users & Permissions 插件中的 isAuthenticated 策略。以下是创建插件策略的步骤:
初始化插件策略
-
运行以下命令:
yarn strapi generate -
按照提示选择:
- 策略(Policy)。
- 输入策略名称。
- 选择将策略添加到现有插件。
生成的策略文件路径为:
src/plugins/[插件名称]/policies/[策略名称].js
配置插件策略
编辑插件相关的路由文件,例如:
src/plugins/[插件名称]/routes/router.js
在 createCoreRouter 中添加策略配置。
返回策略失败的消息
在某些情况下,仅返回错误状态码可能不足以说明问题。您可以通过抛出 PolicyError 对象来返回详细的错误信息。例如:
const { PolicyError } = require('@strapi/utils').errors;
module.exports = async (ctx, config, { strapi }) => {
if (!ctx.state.user) {
throw new PolicyError('用户未登录', { details: '需要登录后才能访问此资源' });
}
return true;
};
使用策略的现实世界示例
假设您正在为一家商店构建后端应用程序,需要确保发送到 Item 的 create 路由的数据格式正确。以下是实现步骤:
安装 Joi 库
在项目根目录运行以下命令安装 Joi:
npm install joi
创建验证策略
在 src/api/item/policies 文件夹中创建 valid-input.js 文件,并添加以下代码:
const Joi = require('joi');
module.exports = async (ctx, config, { strapi }) => {
const schema = Joi.object({
name: Joi.string().required(),
code: Joi.string().required(),
price: Joi.number().required(),
}); const { error } = schema.validate(ctx.request.body); if (error) {
ctx.throw(400, '输入数据格式错误', { details: error.details });
} return true;
};
注册验证策略
编辑以下文件:
src/api/item/routes/item.js
将 valid-input 策略添加到 create 路由配置中。
测试策略
使用 Postman 或 Insomnia 发起 POST 请求,测试数据格式验证功能。若数据格式正确,返回状态码 200,否则返回错误信息。
结论
本文介绍了 Strapi 策略的基础知识,包括全局策略、API 策略和插件策略的创建与使用方法。此外,还通过实际示例展示了如何实现数据验证策略。希望这些内容能帮助您更好地理解和应用 Strapi 策略。
如果您有任何疑问或需要进一步了解,请随时留言交流!
原文链接: https://strapi.io/blog/beginners-guide-to-strapi-policies-and-customizations
最新文章
- Django中API速率限制指南 – CoderPad
- 增强API安全性:使用OPA和Kong Gateway进行细粒度访问控制
- 如何免费调用有道翻译API实现多语言翻译
- 公司logo获取服务:如何让企业自动化生成Logo变得轻松简单?
- 了解和使用REST API
- 为什么API开发对现代应用至关重要?
- 如何利用Apache APISIX实现高效的API认证与鉴权:全面解析主流认证方式
- 医疗保健领域中api解决方案的优势与劣势
- 如何获取腾讯AI开放平台 API Key 密钥(分步指南)
- 如何使用Flask-RESTX构建和文档化RESTful API
- API类型:详解与图示 – Kodezi博客
- 百度文心一言API使用指南:非技术人员入门教程