# 策略

策略是在每个请求到达 controller 之前对每个请求执行特定逻辑的函数 。它们主要用于保护业务逻辑。

Strapi 项目的每个 route 都可以与一系列 策略相关联。例如,名为 is-admin 的 策略可以检查请求是否由管理员用户发送,并限制对关键路由的访问。

策略可以是全局的,也可以是限定范围的。全局 policies 可以关联到项目中的任何工艺路线。作用域内 策略仅适用于特定的 APIplugin

# 实现

一个新的 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 文档).

策略根据其范围以不同的方式称为:

💡 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]: