将 Yii2 集成到 Joomla 中并使用 Joomla 的 "user" table

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

最终,我尝试将 Yii2 集成到 Joomla 中,以便我可以结合使用 Joomla 的用户管理功能和 Yii2's RBAC 功能。例如,我想允许用户 signup 使用 Joomla's registration 进程,但我想使用 Yii2's RBAC.

定义角色和身份验证规则

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

注意:我将 "basic" 模板与 Joomla 3

一起使用

成功标准: - "Yii::$app->user->getId();" 应该 return 当前登录用户的 user_id 来自 Joomla 的 user table - Yii2 的 RBAC 函数也应该工作并在查找 user_id 时使用 Joomla 的 "user" table --

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

这是我迄今为止尝试失败的方法:

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

LINK: 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 中更改默认用户 table。php

LINK: http://Whosebug...le-name-in-yii2 代码:

class User extends ActiveRecord implements IdentityInterface
  {

      public static function tableName()
      {
         return 'fm3lk_user';
      }

3) 在 index.php 中使用以下代码进行测试并使用管理员帐户登录到 Joomla 前端,但没有 return 值

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

您可以使用来自 Joomla 用户 table 的 gii 创建一个新的用户模型。我认为这可能是一个更容易的起点。

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

当用户登录 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#login%28%29-detail

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

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

同时在 joomla 上注销 lougout yii2 应用程序。