将 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 应用程序。
最终,我尝试将 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 应用程序。