Published on

Api platform 教程12---安全

原创文章,转载时需取得本人同意并注明来源
Authors
  • Api platform 教程12---安全
    Name
    langziyang
    Twitter

Api platform 教程12---安全

我们的教程到现在,整个流程都已经差不多了,除了一个现实问题:安全

我们的项目不可能让所有人任意操作吧?谁都能删除我们的资源?不是管理员也能创建用户?

答案就在Api platform的security参数中:

#[ApiResource(
    operations: [
        new GetCollection(provider: UserProvider::class),
        new Get(requirements: ['id' => '\d+'], provider: UserProvider::class),
        new Post(processor: UserProcessor::class),
        new Patch(processor: UserProcessor::class),
        new Delete(security: "is_granted('ROLE_SUPER_ADMIN') or object.owner == user"),
        new Get('/users/test', provider: UserTestProvider::class)
    ],
    security: 'is_granted("ROLE_ADMIN")'
)]

安全参数和其它参数一样,可以是所有端点,也可以是某一个,可以同时存在,相互不会冲突。可用的变量有:

  1. user :当前登录的对象(如果有)
  2. object :反序列化时的当前资源类、序列化时的当前资源、或者进行集合操作的资源集合
  3. previous_object :(仅限 securityPostDenormalize ) object 的克隆,在进行修改之前 - 这是用于创建操作的 null
  4. request (仅在资源级别):当前请求

security 属性中的访问控制检查始终在非规范化步骤之前执行。这意味着对于 PUT 或 PATCH 请求, object 不包含用户提交的值,而是当前存储在持久层中的值。

除了预设的几个变量,你还可以用Voters自定义,这属于是symfony开发的范畴,请查看文档。

当然,api platform中还有很多参数,每一个都会让你的代码更健壮更灵活,我们就不再每一个都讲了,这个教程到现在我觉得已经完成了

但是这也不代表终结,也许我在以后的开发过程中还会遇到一些问题,解决后我会继续更新,如果你遇到问题也可以联系我。