2016-10-21 5 views
0

私はezPublish 5.3を管理サイドでのみ使用しています。私がしたいのは、このバックオフィスのユーザー/ユーザーグループ/役割を管理し、FOSRestBundleの設計されたAPIへのアクセスを制御することです。ここでEzPublishユーザ:symfonyコントローラの前のezPublishアクセスコントロールの使用方法

は私のsecurity.ymlです:

security: 
    providers: 
     ezpublish: 
      id: ezpublish.security.user_provider 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     my_api: 
      pattern: ^/api/v[0-9]+ 
      stateless: true 
      ezpublish_http_basic: 
       realm: eZ Publish REST API 

     ezpublish_front: 
      pattern: ^/ 
      anonymous: ~ 
      ezpublish_rest_session: ~ 
      form_login: 
       require_previous_session: false 
      logout: ~ 

     default: 
      anonymous: ~ 

そして、ここでは、私は私のコントローラで何をしたいです:

<?php 
namespace Acme\AppBundle\Controller; 

use FOS\RestBundle\Controller\FOSRestController; 

class ItemsController extends FOSRestController 
{ 
    public function postItemsAction(Request $request) 
    { 
     if (!$this->get('security.authorization_checker')->isGranted('EZ_CUSTOM_ROLE')) { 
      throw new \Exception('No Auth'); 
     } 

     //... do something 
    } 
} 

私はこの応答を得た:

{ 
    "code": 0, 
    "message": "User 'USER_LOGIN' doesn't have user/login permission to SiteAccess 'site'" 
} 

方法私はそれを達成することはできますか? ユーザーロールを取得するにはどうすればよいですか?

プロファイラーでは、このアクションに基本認証を使用して標準POSTを実行すると、ユーザーはデフォルトのSymfonyロールROLE_USERに接続されていることがわかります。ここで

答えて

0

は私のソリューションです:

<?php 
namespace Acme\AppBundle\Controller; 

use FOS\RestBundle\Controller\FOSRestController; 
use eZ\Publish\API\Repository\Values\User\RoleAssignment; 
use eZ\Publish\API\Repository\Values\User\User; 

class ItemsController extends FOSRestController 
{ 
    public function postItemsAction(Request $request) 
    { 
     if (!$this->isUserRoleGranted()) { 
      throw new \Exception('No Auth'); 
     } 

     //... do something 
    } 

    private function isUserRoleGranted() 
    { 
     $user = $this->getCurrentUser(); 

     if ($user instanceof User) { 
      $roleService = $this->get('ezpublish.api.repository')->getRoleService(); 
      $roles  = $roleService->getRoleAssignmentsForUser($user, true); 

      if (is_array($roles) && !empty($roles)) { 
       foreach ($roles as $role) { 
        if ($role instanceof RoleAssignment) { 
         $roleIdentifier = $role->getRole()->__get('identifier'); 

         if (is_string($roleIdentifier) && $roleIdentifier === 'EZ_CUSTOM_ROLE') { 
          return true; 
         } 
        } 
       } 
      } 
     } 

     return false; 
    } 

    private function getCurrentUser() 
    { 
     return $this->get('ezpublish.api.repository')->getUserService()->loadUser(
      $this->get('ezpublish.api.repository')->getPermissionResolver()->getCurrentUserReference()->getUserId() 
     ); 
    } 
} 
関連する問題