首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EzPublish用户:如何在前端标准symfony控制器中使用ezPublish访问控制

EzPublish用户:如何在前端标准symfony控制器中使用ezPublish访问控制
EN

Stack Overflow用户
提问于 2016-10-21 14:31:57
回答 1查看 425关注 0票数 0

我只在它的管理端使用ezPublish 5.3。我想做的是在后台管理用户/用户组/角色,并控制他们对FOSRestBundle设计的API的访问。

这是我的security.yml:

代码语言:javascript
复制
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: ~

下面是我想在我的控制器里做的事情:

代码语言:javascript
复制
<?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
     }
}

我得到了这样的回应:

代码语言:javascript
复制
{
  "code": 0,
  "message": "User 'USER_LOGIN' doesn't have user/login permission to SiteAccess 'site'"
}

我怎样才能做到这一点?如何检索用户角色?

在分析器中,我可以看到,当我对此操作执行基本操作时,用户将连接到默认的Symfony角色ROLE_USER

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 14:49:11

这是我的解决方案:

代码语言:javascript
复制
<?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()
        );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40179309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档