- Published on
Api platform 教程12---安全
原创文章,转载时需取得本人同意并注明来源
- Authors
-
-
- Name
- langziyang
-
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")'
)]
安全参数和其它参数一样,可以是所有端点,也可以是某一个,可以同时存在,相互不会冲突。可用的变量有:
- user :当前登录的对象(如果有)
- object :反序列化时的当前资源类、序列化时的当前资源、或者进行集合操作的资源集合
- previous_object :(仅限 securityPostDenormalize ) object 的克隆,在进行修改之前 - 这是用于创建操作的 null
- request (仅在资源级别):当前请求
security 属性中的访问控制检查始终在非规范化步骤之前执行。这意味着对于 PUT 或 PATCH 请求, object 不包含用户提交的值,而是当前存储在持久层中的值。
除了预设的几个变量,你还可以用Voters自定义,这属于是symfony开发的范畴,请查看文档。
当然,api platform中还有很多参数,每一个都会让你的代码更健壮更灵活,我们就不再每一个都讲了,这个教程到现在我觉得已经完成了
但是这也不代表终结,也许我在以后的开发过程中还会遇到一些问题,解决后我会继续更新,如果你遇到问题也可以联系我。