2014-06-20 1 views
6

Ich versuche @Security Annotationen für meine Routen zu verwenden. Wie folgt aus:Benutzerdefinierte Nachricht für @Security Annotation

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

Wenn die Sicherheitseinschränkung eine Ausnahme ausgelöst wird, erhalte ich die Meldung Expression "has_role('ROLE_USER')" denied access.

Dies ist nicht akzeptabel, um dem Endbenutzer angezeigt werden, also versuche ich, eine Möglichkeit zum Anpassen der Nachricht für Annotation.

einfache Abhilfe ist nicht @Secutity Anmerkungen zu verwenden und schreiben Code wie diese:

/** 
* @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(); 
} 

Aber das ist weniger bequem und weniger lesbar.

Ist es möglich, benutzerdefinierte Nachricht zu @Security Annotationen zu schreiben?

Antwort

9

Sobald ich festgestellt habe, dass dies nicht möglich ist, habe ich eine pull request an die Sensio FrameworkExtra Bundle gemacht, um dies zu ermöglichen.

Diese PR ermöglicht durch Angabe der Nachrichtenparameter wie

@Security("has_role('ROLE_USER')",message="You have to be logged in") 
+0

So angezeigte Meldung anpassen, warum hast du das PR schließen? Es war eine gute Sache, die sich nach dem Schließen immer noch aufwertete. Bitte überlegen Sie, es wieder zu öffnen. –

+1

Nun, eigentlich, weil ein Jahr ohne Kommentar des Wartungstechnikers vergangen ist, aber die PR nicht mehr synchron ist und ich keinen Zweck gesehen habe, es aufrechtzuerhalten. – ScayTrase