Symfony2中文手冊(cè)
/ 如何在安全,路由,服務(wù)和驗(yàn)證中使用表達(dá)式
如何在安全,路由,服務(wù)和驗(yàn)證中使用表達(dá)式
Symfony的自帶了強(qiáng)力的表達(dá)式語(yǔ)言組件。它允許你在配置中添加高級(jí)自定義邏輯。
Symfony框架在以下方面很好地利用了表達(dá)式:
- 配置服務(wù) ;
- 路由匹配條件 ;
- 安全檢查(下文有解釋)和使用allow_if進(jìn)行訪問(wèn)控制 ;
- 驗(yàn)證。
創(chuàng)建33關(guān)于使用狀語(yǔ)從句:表達(dá)式的更多內(nèi)容請(qǐng)參考表達(dá)式語(yǔ)法。
安全性:表達(dá)式使用復(fù)雜進(jìn)行訪問(wèn)控制 ?
接受除了ROLE_ADMIN
這種角色之外,isGranted
也。接受Expression
對(duì)象:
use Symfony\Component\ExpressionLanguage\Expression;// ... public function indexAction(){ $this->denyAccessUnlessGranted(new Expression( '"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())' )); // ...}
本例中,如果當(dāng)前用戶有ROLE_ADMIN
或者當(dāng)前的用戶對(duì)象的isSuperAdmin()
方法返回true
那么訪問(wèn)將被授權(quán)(注意:你的用戶對(duì)象未必?fù)碛?/span>isSuperAdmin
方法,這個(gè)方法只為此例出現(xiàn))。
這就用到了一個(gè)表達(dá)式,你還可以學(xué)習(xí)更多關(guān)于表達(dá)languange的語(yǔ)法,參考表達(dá)式語(yǔ)法。
在表達(dá)式中,你可以訪問(wèn)以各種變量:
user
- 用戶對(duì)象(或者是
anon
,如果未經(jīng)認(rèn)證的話)。 roles
- 用戶所擁有的角色數(shù)組,包括角色層級(jí)(角色層級(jí))但是不包括
IS_AUTHENTICATED_*
屬性(參考下面的功能)。 object
- 第二作為個(gè)參數(shù)傳到
isGranted
方法的對(duì)象(如果有的話)。 token
- 令牌對(duì)象。
trust_resolver
AuthenticationTrustResolverInterface
接口,其對(duì)象是:可能你希望使用下面的is_*
函數(shù)來(lái)替代。
另外,你可以在表達(dá)式中訪問(wèn)各種函數(shù):
is_authenticated
- 返回
true
,如果用戶通過(guò)“記住我”或“完全”身份認(rèn)證通過(guò)的話 - 比如,如果用戶已登錄,就返回true。 is_anonymous
- 于等同在
isGranted
函數(shù)中使用IS_AUTHENTICATED_ANONYMOUSLY
。 is_remember_me
- 類似但不完全等同于
IS_AUTHENTICATED_REMEMBERED
,見下文。 is_fully_authenticated
- 類似但不完全等同于
IS_AUTHENTICATED_FULLY
,見下文。 has_role
- 查看一個(gè)用戶是否擁有給定的ROLE - 等同于一個(gè)這樣的表達(dá)式
'ROLE_ADMIN' in roles
。