如何在安全,路由,服務和驗證中使用表達式
Symfony的自帶了強力的#表達式語言元件。它允許你在配置中添加高級自訂邏輯。
Symfony框架在以下方面很好地利用了表達式:
- 設定服務 ;
- #路由匹配條件 ;
- 安全檢查(下文有解釋)和#使用allow_if進行存取控制 ;
- 驗證。
建立³³關於使用狀語子句:表達式的更多內容請參考##表達式語法。
安全性:表達式使用複雜性進行存取控制 ##¶
接受除了ROLE_ADMIN 本例中,如果目前使用者有 這就用到了一個表達式,你還可以學習更多關於表達languange的語法,參考表達式語法。 在表達式中,你可以存取以各種變數: 另外,你可以在表達式中存取各種函數:#這種角色之外,isGranted
也。接受Expression
物件:
use Symfony\Component\ExpressionLanguage\Expression;// ... public function indexAction(){
$this->denyAccessUnlessGranted(new Expression(
'"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())'
)); // ...}
ROLE_ADMIN
或目前的使用者物件的#isSuperAdmin()
方法回傳true
那麼存取將被授權(注意:你的使用者物件未必有isSuperAdmin
方法,這個方法只為此範例出現)。 ,如果未經認證的話)。
#屬性(參考下面的功能)。
方法的物件(如果有的話)。
AuthenticationTrustResolverInterface
接口,其物件是:可能你希望使用下面的is_*函數來取代。
is_authenticated
true
,如果使用者透過“記住我」或「完全」身份認證通過的話- 例如,如果用戶已登錄,就回傳true。 is_anonymous
。
#,見下文。