我正在尝试将我的应用程序从 Silex 迁移到 Symfony。
我正在使用 Silexbefore(...)
方法注册要在执行操作本身之前执行的方法,以检查是否设置了某些会话变量。
我可以对 Symfony 中的事件监听器做类似的事情,但是控制器需要不同的 before 方法来包含操作方法。
目前,Silex 看起来如下所示:
$controllers = $app['controllers_factory'];
$controllers->before($this->guard('user'));
$controllers->get('/switch/{gameId}', $this->action('switch'))
->bind('game:switch')
->value('gameId', 0)
->assert('gameId', '\d+');
$controllers->match('/register', $this->action('register'))
->before($this->guard('player'))
->bind('game:register');
return $controllers;
如果之前选择了容器对象,则完全经过身份验证的用户可以访问某些控制器操作。所以最后看守方法是一种访问控制。
如果用户在没有选择对象的情况下访问操作,我想将用户重定向到选择或类似内容。
一种想法是将其实现为角色并在会话期间临时授予角色。似乎不可能在用户登录时临时存储角色。
我可以将它与access_denied_url调用的自定义控制器或更好的方法结合使用来实现自己的access_denied_handler来处理访问控制处理程序拒绝的访问。
但
另一种思路是使用access_control下的allow_if表达式,不过还有一点,如果出现异常(access denied,如何实现Access Denied Handler),我该如何反应?
您将如何实施这样的系统?
感谢您的建议中的任何提示!