0

我对 Zend 2,Doctrine and Stuff 很陌生

在我的项目中,我想通过教义从 zend 2 实现 BjyAuthorize 模块。我已经做了一些事情——我成功地实现并配置了除了默认角色之外的所有东西,如果没有给出身份(新用户正在访问,或者例如在注销之后)。

角色和用户类是 BjyAuthorize 的蓝图

这是我在 bjyauthorize.global.php 中定义的身份提供者类

'identity_provider' => 'Application\Provider\Identity\IdentityProvider',

代码:

namespace Application\Provider\Identity;

use BjyAuthorize\Provider\Identity\ProviderInterface;
use Zend\Authentication\AuthenticationService;

class IdentityProvider implements ProviderInterface
{
//    public function getDefaultRole()
//    {
//        $aTest = "test";
//        return new Debug();
//    }

    public function getIdentityRoles()
    {
        $oIdentity = $this->getIdentity();

        $aRoles = [];
        if(!empty($oIdentity))
        {
            $aRoles = $oIdentity->getRoles();
        }

        return $aRoles;
    }

    protected $authService;

    public function __construct(AuthenticationService $authService)
    {
        $this->authService = $authService;
    }

    public function getAdapter()
    {
        return $this->authService->getAdapter();
    }

    public function getStorage()
    {
        return $this->authService->getStorage();
    }

    public function getIdentity()
    {
        return $this->authService->getIdentity();
    }

    public function clearIdentity()
    {
        return $this->authService->clearIdentity();
    }
}

角色提供者已成功设置为

'role_providers' => [
    // this will load roles from
    // the 'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' service
    "BjyAuthorize\Provider\Role\ObjectRepositoryProvider" => [
        // class name of the entity representing the role
        'role_entity_class' => 'Application\Tables\Role',
        // service name of the object manager
        'object_manager'    => 'doctrine.entitymanager.orm_default',
    ],
],

现在唯一缺少的是,如果新用户正在访问该页面,我想设置一个默认角色(来自 db,角色“guest”)。毕竟阅读和谷歌搜索我找不到任何提示在哪里以及如何设置默认角色。

我已经在我的 IdentityProvider 中尝试了方法“getDefaultRole”,但是这个方法似乎没有被触发。

如果没有设置身份,我现在只看到在我的“getIdentityRoles”中获取默认角色。

但是要归档这个,我必须让学说实体管理器和更多的东西包括在内 - 这是唯一的方法吗?

编辑:在“byauthorize.global.php”我可以看到以下几行:

// set the 'guest' role as default (must be defined in a role provider)
'default_role' => 'guest',

但我不知道我必须在角色提供者中定义默认角色... :-/

亲切的问候

4

1 回答 1

1

'default_role'设置仅由AuthenticationIdentityProviderBjyAuthorize (及其工厂)发货使用。

在实现您自己的IdentityProvider时,您只需实现BjyAuthorize\Provider\Identity\ProviderInterface#getIdentityRoles()它,以便在没有给出时回退到您选择的身份。

于 2014-11-19T17:10:18.483 回答