【发布时间】:2011-02-27 18:04:30
【问题描述】:
我想知道如何只处理一个身份验证过程和多个表中的“用户”。我有 4 个用户表:用户、管理员、艺术家、团队管理员,它们都有特定的字段,但我希望所有这些用户都能够通过主页上的一个表单进行连接,然后被重定向到他们的特定仪表板。
我认为重定向应该不是问题,添加的一些路由应该可以工作,但我真的不知道从哪里看/开始让这一切成为可能。
干杯,
尼古拉斯。
编辑:这是最终解决方案(感谢 deizel)
App::import('Component', 'Auth');
class SiteAuthComponent extends AuthComponent {
function identify($user = null, $conditions = null) {
$models = array('User', 'Admin', 'Artist');
foreach ($models as $model) {
$this->userModel = $model; // switch model
$this->params["data"][$model] = $this->params["data"]["User"]; // switch model in params/data too
$result = parent::identify($this->params["data"][$model], $conditions); // let cake do its thing
if ($result) {
return $result; // login success
}
}
return null; // login failure
}
}
【问题讨论】:
-
为什么不为用户创建一个单表。您可以轻松地在表中为用户的“类型”定义一个单独的列。这样您就不需要为这些用户提供 4 种不同的模型和控制器?
-
@Gaurav:嗨。我没有这样做首先是因为我在选择框架之前进行了分析,其次是因为艺术家和团队艺术家之间存在关系,所以在分析视图中您需要定义 2 个表。这里的问题不是关于改变模式(我已经想到了,使用空列),而是试图为我的模式找到一个 PHP 解决方案。干杯。
-
我正在尝试实现一个非常相似的功能,其中每个用户类型都有不同的仪表板。我想知道你把代码放在哪里来扩展 Auth 组件?还有,你是如何实现重定向的?在每个控制器中设置重定向变量?谢谢
-
您只需要创建一个新组件(在我的示例中称为
SiteAuthComponent),将其添加到 $components 数组中的 app_controller 中,然后不要使用$this->Auth->function()在任何地方使用$this->SiteAuth->function()需要调用您网站中的 Auth 组件。祝你好运! -
CakePHP 2.x 解决方案:stackoverflow.com/questions/11135066/…
标签: cakephp authentication cakephp-1.3 multiple-tables