1

我有一个通过 HABTM 关系与模型'User'相关的模型。'Group'我能够查询模型以确定经过身份验证的用户属于哪些成员资格,但我无法从概念上提出一种在页面isAuthorized()函数调用上轻松访问该数据的方法。

理想情况下,我希望有一种方法可以链接到身份验证方法并缓存授权用户的组成员身份,以便我可以快速查找isAuthorized()呼叫。蛋糕中是否有一些功能可以做到这一点?我显然对建议持开放态度,因为在从过去的员工那里继承了这个项目之后,我对这个框架还很陌生。

据我所知,我希望能够访问或搜索返回的用户的组成员身份,AuthComponent::user()但由于这是一个静态方法,我无法访问其模型。这可能吗?

编辑:解决方案是我与 ndm 的讨论以及发现应用程序似乎破坏了身份验证的混合体。这可能是最后一个创建应用程序的开发人员的错,但我设法通过覆盖BaseAuthenticate. _findUser($username,$password)函数继承“组”数组和“用户”数组。它在登录时被获取,但只有模型的“用户”部分返回给调用 Auth 的控制器。

4

1 回答 1

3

检索当前登录用户的组应该很简单,您只需要适当地配置您的身份验证处理程序,以便它获取关联的模型。这可以使用resurivecontains设置来完成,尽管后者目前似乎有点坏(至少行为是出乎意料的)。

使用示例recursive

$this->Auth->authenticate = array
(
    'Form' => array
    (
        'userModel' => 'User',
        'recursive' => 1
    )
);

使用示例contain

$this->Auth->authenticate = array
(
    'Form' => array
    (
        'userModel' => 'User',
        'contain' => array('Group')
    )
);

为了使该contain方法起作用,User模型需要充当Containable!但是,如前所述,这似乎被破坏了,因为recursiveis always used,并且无法将其设置为,null因为它被强制转换为整数。所以你也需要提供适当的recursive设置(即recursive = 1),但是这以某种方式违背了Containable应该自动找出适当的递归设置的行为的目的(除非另有配置)。

无论如何,两者都会使身份验证器获取您的UserHABTMGroup关联。无论哪种方式,您都应该能够AuthComponent::user()从您想要的任何地方访问数据:

$currentUser = AuthComponent::user();
pr($currentUser['Group']);

编辑(07.11.2012):在身份验证处理程序配置中使用的问题contain现在已针对 2.2.4 修复,从而可以通过null设置recursive

于 2012-11-06T17:08:33.827 回答