【问题标题】:Zend Framework 2 - bjyauthorize - Link new user with roleZend Framework 2 - bjyauthorize - 将新用户与角色链接
【发布时间】:2013-05-23 07:52:27
【问题描述】:

我正在使用bjyauthorize,我非常适合现有用户。我现在需要动态添加用户。

我可以在UserRoleLinker 表中手动设置UserRole 之间的连接,但是如何按照新用户的方式设置?也许我错过了一些琐碎的事情?

谢谢!

【问题讨论】:

    标签: php authentication zend-framework2 bjyauthorize


    【解决方案1】:

    ZfcUserUser服务在用户插入数据库后触发register.post事件,所以你只需要监听那个事件。您可以通过在模块引导程序中将侦听器附加到共享事件管理器来做到这一点。

    你的监听器接收到的事件实例包含用户服务本身,加上user数据,以及注册时使用的form,应该足以建立链接

    public function onBootstrap(MvcEvent $e)
    {
        $app = $e->getApplication();
        $events = $app->getEventManager();
        $shared = $events->getSharedManager();
        $sm = $app->getServiceManager();
    
        $shared->attach('ZfcUser\Service\User', 'register.post', function ($e) use ($sm) {
             $userService = $e->getTarget();
             $newUser = $e->getParam('user');
             $registrationForm = $e->getParam('form');
             // do something with the new user info, eg, assign new user role...
        });
    }
    

    【讨论】:

    • 谢谢!你有链接本身的例子吗?
    • 怕不是罗恩,我已经有一段时间没用过 bjyauth/zfcuser 了,而且在我修修补补的时候,我从来没有达到过关联角色的程度。
    【解决方案2】:

    这是完整的解决方案:

    public function onBootstrap(MvcEvent $e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
    
        //You need a copy of the service manager and it has to be set as a member for the lambda function to call it
        $this->sm = $e->getApplication()->getServiceManager();
    
        $zfcServiceEvents = $e->getApplication()->getServiceManager()->get('zfcuser_user_service')->getEventManager();
    
        $zfcServiceEvents->attach('register.post', function($e) {
    
            /** @var \User\Entity\UserPdo $user */
            $user = $e->getParam('user');
    
            //This is the adapter that both bjyAuthorize and zfcuser use
            $adapter     = $this->sm->get('zfcuser_zend_db_adapter');
    
            //Build the insert statement
            $sql = new \Zend\Db\Sql\Sql($adapter);
    
            //bjyAuthorize uses a magic constant for the table name
            $insert = new \Zend\Db\Sql\Insert('user_role_linker');
            $insert->columns(array('user_id', 'role_id'));
            $insert->values(array('user_id' => $user->getId(), 'role_id' => 'user'), $insert::VALUES_MERGE);
    
            //Execute the insert statement
            $adapter->query($sql->getSqlStringForSqlObject($insert), $adapter::QUERY_MODE_EXECUTE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多