在本地 API 操作中遵循访问控制

在 Payload 中,本地 API 操作默认会绕过访问控制。这意味着操作执行时不会检查当前用户是否有执行该操作的权限。这在某些不需要访问控制的场景下很有用,但出于安全考虑,了解何时强制执行访问控制也很重要。

默认行为:跳过访问控制

默认情况下,本地 API 操作会跳过访问控制。这使得操作可以在不检查当前用户是否具有适当权限的情况下执行。这在管理后台或服务器端脚本中可能很有用,因为这些场景下执行操作不需要用户上下文。

例如:

// 默认情况下,此操作的访问控制会被跳过
const test = await payload.create({
  collection: 'users',
  data: {
    email: 'test@test.com',
    password: 'test',
  },
})

遵守访问控制

如果你希望遵守访问控制并确保只有具有适当权限的用户才能执行操作,需要显式传递 user 对象并将 overrideAccess 选项设置为 false

  • overrideAccess: false:确保不会跳过访问控制,操作会遵守当前用户的权限。
  • user:将已认证的用户上下文传递给操作。这确保系统会检查用户是否有执行该操作的权限。
const authedCreate = await payload.create({
  collection: 'users',
  overrideAccess: false, // 确保会应用访问控制
  user, // 传递已认证用户以检查权限
  data: {
    email: 'test@test.com',
    password: 'test',
  },
})

这个例子中,只有当我们传递的 user 具有适当的访问控制权限时,才会允许创建文档。