亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Symfony2中文手冊(cè) / 如何在安全,路由,服務(wù)和驗(yàn)證中使用表達(dá)式

如何在安全,路由,服務(wù)和驗(yàn)證中使用表達(dá)式

Symfony的自帶了強(qiáng)力的表達(dá)式語(yǔ)言組件。它允許你在配置中添加高級(jí)自定義邏輯。

Symfony框架在以下方面很好地利用了表達(dá)式:

創(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。

is_remember_me不同于檢查

IS_AUTHENTICATED_REMEMBERED

is_remember_me狀語(yǔ)從句:is_authenticated_fully函數(shù)與在isGranted函數(shù)中使用IS_AUTHENTICATED_REMEMBERED狀語(yǔ)從句:IS_AUTHENTICATED_FULLY的英文類似的-它們但并相同下例展示了其區(qū)別:

use Symfony\Component\ExpressionLanguage\Expression;// ... $ac = $this->get('security.authorization_checker');$access1 = $ac->isGranted('IS_AUTHENTICATED_REMEMBERED'); $access2 = $ac->isGranted(new Expression(
    'is_remember_me() or is_fully_authenticated()'));

在這里,$access1$access2的值是相同的。不同于IS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_FULLY的行為,is_remember_me函數(shù)僅當(dāng)用戶通過(guò)了remember_me cookie認(rèn)證時(shí)返回true,同時(shí)is_fully_authenticated 僅當(dāng)用戶在會(huì)話周期之內(nèi)(比如是full-fedged)是成功登錄的狀態(tài),才會(huì)返回真。