Symfony2:控制对资源的访问

时间:2014-09-23 16:15:20

标签: php security symfony

我正在开发一个应用程序,其中每个用户可以访问许多Project个,其中每个Project可能包含许多Campaign等等,所以向前。 然后我的网址如下:

/项目/ {project} /构件

/项目/ {project} /构件/ {member}

/项目/ {project} /广告活动

/项目/ {project} /运动/ {campaign}

/项目/ {project} /运动/ {campaign} /情节

/项目/ {project} /运动/ {campaign} /情节/ {plot}

我已经读过@ParamConverter可以处理这些网址以满足我的需求。

- 问题 -

我正在寻找一种方法,以便访问项目的任何用户都被授权...而无需复制每个控制器内的代码。 一个用户可以绑定到许多项目,授予(ROLE_MEMBERROLE_ADMIN)。

1 个答案:

答案 0 :(得分:1)

我建议每个http://symfony.com/doc/current/cookbook/service_container/event_listener.html

让自己成为一个KernelEvents :: CONTROLLER监听器

在路由与控制器匹配之后但在调用控制器的action方法之前,将调用侦听器。 request参数将设置您的项目/活动等变量。

然后我建议让这个监听器加载到你的项目和活动中,而不是使用param转换器。我只是觉得它会更清洁一点。您需要做的就是检索它们然后将它们存储回您的请求对象中。然后它们将以您的控制器操作方法结束。

一旦有了对象,就可以使用安全上下文来检查角色,如果需要,只需抛出一个AccessDenied异常。

我实际上会将权限检查内容移交给一个或多个安全选民http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

这将为您提供更精细的访问控制,而无需使用完整的访问控制列表。这也意味着如果需要,您可以在其他地方进行角色检查。