2017-02-09 56 views
0

我有ajax控制器來存儲從JS通過AJAX調用的操作。Symfony 2 - 安全Ajax控制器

在這裏,每一個動作我驗證如果請求被AJAX製成,無其他:

if (!$request->isXmlHttpRequest()) { 
    return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400); 
} 

現在的問題是,不是每個AJAX控制器動作應該被大家稱爲,而是取決於作用登錄的用戶。

行動的請求是由AJAXJS製成,但由於行動是在控制我仍然能夠通過$this->getUser()在用戶對象得到記錄,並檢查用戶是否具有可接受ROLE通過isGranted()執行控制器動作。

例子:

if (!$authorizationChecker->isGranted('ROLE_ADMIN')) { 
    return new JsonResponse(array('message' => 'This can be performed only by admin!'), 400); 
} 

我應該檢查ROLES從內部控制的每一個動作或嘗試在security.yml配置access_control阿賈克斯路線?

我不知道這兩種方法之間有什麼大的區別,但想知道哪一個更實用,可以讓我的ajax操作更安全。

+0

只要你寫測試,他們兩個將同樣安全。我的意思是,效果是一樣的。 如果你想讓你的動作不那麼冗長,你可以使用yaml或者你可以使用註釋:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html – jkrnak

回答

0

取決於您擁有的控制器的編號AJAX。如果你有那麼多的控制器只允許某個角色使用,access_controlsecurity.yml是一個不錯的選擇。否則你可以在每個控制器中都有條件。

對於動態權限層,根據主題屬性(查看內容)決定權限,您可能需要使用voter