如何保护Symfony2 REST API

时间:2015-06-16 16:32:10

标签: security symfony fosuserbundle fosrestbundle

我使用security.yml和access_control来保护基于用户角色的API路径。这工作正常,但我如何保护/ api / project /:id等特定参数? 不同的用户可以访问不同的项目ID。因此,必须进行数据库调用以检查该用户是否有权访问此项目。

我尝试使用$ this-> denyAccessUnlessGranted('GET',$ projectId,'未经授权的访问!');在ProjectController中,它调用自定义选民来检查数据库,从而检查访问权限。

public function getProjectAction(Request $request, $id)
{
    $this->denyAccessUnlessGranted('GET', $id, 'Unauthorized access!');

这样可行,但将此代码添加到ProjectController中的10多个操作以及API的许多部分中似乎非常不切实际。

因此我的问题是:使用symfony2,fosUserBundle和fosRestBundle确保REST api的最佳实践是什么

1 个答案:

答案 0 :(得分:1)

我建议介绍安全选民。

http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

还要创建某种异常处理程序/侦听器,以捕获异常并进行特​​定的错误响应。

http://symfony.com/doc/current/cookbook/service_container/event_listener.html