【问题标题】:EzPublish users : how to use ezPublish access control in front standard symfony controllerEzPublish 用户:如何在标准 symfony 控制器中使用 ezPublish 访问控制
【发布时间】:2016-10-21 14:31:57
【问题描述】:

我仅将 ezPublish 5.3 用于其管理方面。我想做的是在这个后台管理用户/用户组/角色,并控制他们对 FOSRestBundle 设计的 API 的访问。

这是我的 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 连接。

【问题讨论】:

    标签: php symfony basic-authentication ezpublish


    【解决方案1】:

    这是我的解决方案:

    <?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()
            );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2015-10-17
      • 2018-06-04
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多