Symfony2访问被拒绝的例外 - 更多细节?

时间:2013-03-19 11:26:23

标签: security symfony acl roles blacklist

我有以下问题: 在我的symfony 2应用程序中,我有一个名为“ClientIpVoter”的选民,它检查客户端ip是否被列入黑名单(http://symfony.com/doc/2.0/cookbook/security/voters.html)。如果ip被列入黑名单,则安全组件会抛出AccessDeniedException。

安全组件的其他部分也会抛出AccessDeniedException,例如,如果用户没有正确的角色。

现在我的问题是,我想知道为什么抛出AccessDeniedException,以便做不同的事情。例如,显示消息,或者(如果由于角色不足而抛出了AccessDeniedException),将用户重定向到他可以例如确认其帐户或电子邮件的页面。

但AccessDeniedException不包含有关授权问题来源的任何信息。你会如何实现这个?

1 个答案:

答案 0 :(得分:0)

您可以捕获针对列入黑名单的IP抛出的AccessDeniedException,将其包装在您自己的自定义异常中,该异常会添加额外信息,例如AccessDeniedBecauseOfInsufficientRolesException,然后再次抛出该异常。 伪代码:

try
{
  BlacklistedVoterStuff();
}
catch( AccessDeniedException e )
{
  throw AccessDeniedBecauseOfInsufficientRolesException( e.message );
}