我正在开发一个应用程序,其中每个用户可以访问许多Project
个,其中每个Project
可能包含许多Campaign
等等,所以向前。
然后我的网址如下:
/项目/ {project}
/构件
/项目/ {project}
/构件/ {member}
/项目/ {project}
/广告活动
/项目/ {project}
/运动/ {campaign}
/项目/ {project}
/运动/ {campaign}
/情节
/项目/ {project}
/运动/ {campaign}
/情节/ {plot}
我已经读过@ParamConverter
可以处理这些网址以满足我的需求。
- 问题 -
我正在寻找一种方法,以便访问项目的任何用户都被授权...而无需复制每个控制器内的代码。
一个用户可以绑定到许多项目,授予(ROLE_MEMBER
或ROLE_ADMIN
)。
答案 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。
这将为您提供更精细的访问控制,而无需使用完整的访问控制列表。这也意味着如果需要,您可以在其他地方进行角色检查。