2014-11-03 81 views
-1

我需要檢查登錄用戶是否在系統上有某些角色,以便我允許或不允許某些操作。我正在使用JMSSecurityExtraBundle,並檢查了Expression Based Authorization的文檔,但由於代碼無法正常工作,所以我做錯了什麼。看看這個代碼:如何檢查用戶是否具有某種角色並因此允許執行某些操作?

use JMS\SecurityExtraBundle\Annotation\Secure; 
use JMS\SecurityExtraBundle\Security\Authorization\Expression\Expression; 

if ($this->get('security.context')->isGranted(array(new Expression('hasRole("ROLE_ADMIN")')))) { 
    echo "Enter"; 
} else { 
    echo "Do not enter"; 
} 

但我登錄的任何時間,甚至ADMIN裏面有所有的權利,並已ROLE_ADMIN,我看到的唯一的文字是「不要進入」,這是完全錯誤的。在here中的示例代碼中,作者使用了一個$securityContext var,但它來自哪裏?這個var的定義在哪裏?我認爲它會指向SecurityContext,但我不太確定,我的代碼的問題在哪裏?我如何檢查用戶是否具有某種角色,並因此允許它執行某些代碼?

+0

爲什麼不簡單使用' - > isGranted('ROLE_ADMIN')'? – 2014-11-03 21:29:46

+0

那是怎麼回事?你能寫一小段代碼來理解它嗎? – ReynierPM 2014-11-03 21:30:49

回答

1

你不需要註解表達的任何使用,如果你只是要檢查在控制器用戶的角色,這就足夠了:

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) { 
    echo "Enter"; 
} else { 
    echo "Do not enter"; 
} 

在谷歌的一個快速搜索將返回您的文檔部分有關的權利http://symfony.com/doc/current/book/security.html#access-control

1

我允許或不允許某些操作。

如果你的意思是在控制器的正常操作,然後方便的快捷鍵是使用@security註釋從SensioFrameworkExtraBundle

/** 
* @Security("has_role('ROLE_ADMIN')") 
*/ 
public function indexAction() 
{ 
    // ... 
} 

但是,這是不是真的這樣你應該如何發展的Symfony 2.樂雷基礎的行動可以在access_control定義它。

# app/config/security.yml 
security: 
    # ... 
    access_control: 
     - { path: ^/admin/users, roles: ROLE_SUPER_ADMIN } 
     - { path: ^/admin, roles: ROLE_ADMIN } 
+0

這是另一種方式,但是如果我有500個控制器,那麼我會在'security.yml'上有500行,這不是主意,我更願意在註釋上轉發此內容。在另一方面,我會檢查其他條件的ROLE而不是完整的函數,無論如何謝謝 – ReynierPM 2014-11-03 23:02:59

相關問題