6

我正在尝试@Security为我的路线使用注释。像这样:

/**
 * @return Response
 * @Route("/action")
 * @Security("has_role('ROLE_USER')")
 * @Template()
 */
public function someAction()
{
    return array();
}

当安全限制引发异常时,我收到消息Expression "has_role('ROLE_USER')" denied access

向最终用户显示这是不可接受的,因此我正在尝试找到一种方法来自定义注释消息。

简单的解决方法是不使用@Secutity注释并编写如下代码:

/**
 * @return Response
 * @Route("/action")
 * 
 * @Template()
 */
public function someAction()
{
    if (!$this->get('security.context')->isGranted('ROLE_USER')) {
        throw new AccessDeniedException('You have to be logged in in order to use this feature');
    }

    return array();
}

但这不太方便且可读性较差。

是否可以将自定义消息写入@Security注释?

4

1 回答 1

10

一旦我意识到这是不可能的,我就向 提出了一个拉取请求Sensio FrameworkExtra Bundle以使这成为可能。

此 PR 允许通过指定消息参数来自定义显示的消息,例如

@Security("has_role('ROLE_USER')",message="You have to be logged in")
于 2014-06-20T14:25:04.983 回答