# 策略
策略是在每个请求到达 controller 之前对每个请求执行特定逻辑的函数 。它们主要用于保护业务逻辑。
Strapi 项目的每个 route 都可以与一系列 策略相关联。例如,名为 is-admin
的 策略可以检查请求是否由管理员用户发送,并限制对关键路由的访问。
策略可以是全局的,也可以是限定范围的。全局 policies 可以关联到项目中的任何工艺路线。作用域内 策略仅适用于特定的 API 或 plugin。
# 实现
一个新的 policy 可以被实现:
- 使用 交互式 CLI 命令
strapi generate
- 或通过在相应的文件夹中创建 JavaScript 文件来手动操作 (参见 project structure):
./src/policies/
全局 policies./src/api/[api-name]/policies/
API policies./src/plugins/[plugin-name]/policies/
插件 policies
全局策略实现示例:
policyContext
是围绕 controller 上下文的包装器。它添加了一些逻辑,这些逻辑对于为 REST 和 GraphQL 实现策略非常有用。
可以使用 config
对象配置策略:
# 用法
要将策略应用于路由,请将其添加到其配置对象 (参见 routes 文档).
策略根据其范围以不同的方式称为:
- 使用
global::policy-name
对于 全局策略 - 使用
api::api-name.policy-name
对于 API 策略 - 使用
plugin::plugin-name.policy-name
对于 插件策略
💡 TIP
要列出所有可用策略,请运行 yarn strapi policies:list
.
# 全局策略
全局策略可以关联到项目中的任何路由。
# 插件策略
Plugins 可以添加策略并将其公开给应用程序。例如,Users & Permissions plugin 附带了策略,以确保用户经过身份验证或有权执行操作:
# API 策略
API 策略与已声明这些策略的 API 中定义的路由相关联。
To use a policy in another API, reference it with the following syntax: api::[apiName].[policyName]
:
← Routes Middlewares →