将Yii2集成到Joomla中并使用Joomla's "user"表格


Integrating Yii2 into Joomla and using Joomla's "user" table

最终,我尝试将Yii2集成到Joomla中,这样我就可以将Joomla的用户管理功能与Yii2's RBAC功能结合使用。例如,我想允许一个用户使用Joomla's registration进程访问signup,但我想使用Yii2's RBAC定义角色和认证规则。

问题是Yii2似乎无法使用Joomla's "user"表来查找当前登录用户的user_id值(如果我想检查登录用户对Yii2的RBAC auth_assignment表的权限,这是必要的)。

注意:我使用的是Joomla 3的"basic"模板

成功标准:"Yii::$app->user->getId();"应该从Joomla的user表中返回当前登录用户的user_id- Yii2的RBAC函数也应该工作,并使用Joomla的"用户"表查找user_id—

if (Yii::$app->user->can('some-auth-item'))
    {
        return $this->render('some-page');
    }

到目前为止,这是我尝试失败的:

1)在index.php中添加Yii2到Joomla(加载时没有问题)

链接:http://www.yiiframew...ntegration.html代码:

require('/../../../basic/vendor/yiisoft/yii2/yii.php');
$yiiConfig = require('/../../../basic/config/web.php');
new yii'web'Application($yiiConfig); // Do NOT call run() here
2)修改models/User.php中默认的User表

链接:http://stackoverflow...le-name-in-yii2代码:

class User extends ActiveRecord implements IdentityInterface
  {
      public static function tableName()
      {
         return 'fm3lk_user';
      }

3)在index.php中使用以下代码测试,并使用Admin帐户登录到Joomla前端,但没有返回值

<?php 
        $zzz = Yii::$app->user->getId();
        echo $zzz;
    ?>

你混淆了基本用户模型和用户身份。

当用户登录joomla时,它创建一个用户会话,该会话不连接到yii2用户身份(Yii::$app->user,一旦初始化,无论如何都会从会话中获取数据,但结构与joomla不同)。在yii2中,用户模型实现了标识接口

    class User extends ActiveRecord implements IdentityInterface

因此,在joomla成功登录后,您应该登录yii2.

http://www.yiiframework.com/doc - 2.0 -/- yii web - user.html #登录% 28% 29-detail

    $userModel = new User;
    $userModel->findIdentity($joomlaUserId);
    Yii::$app->getUser()->login($userModel, $duration);

其中$userModel实现yii'web'IdentityInterface并映射到joomla用户表,$duration匹配joomla会话持续时间。之后,你可以访问Yii::$app->user->getId();

在joomla注销注销yii2应用程序

您可以使用Joomla的用户表中的gii创建一个新的User模型。