我正在使用本教程向我的应用添加身份验证和授权组件。
问题在于我发现的所有教程都只假设用户只有一个角色。在附加的视频中,角色只是users表中的枚举字段。我有三张桌子:
我正在登录过程中工作,直到获取登录用户的角色。这样做的最佳方法是什么?有没有人知道包含这个的教程?我正在使用Cake 2.5.2
我可以发布您可能认为相关的代码,但我在视频中有很多内容。此外,代码的许多内部工作似乎都被隐藏了。任何建议都会很棒!
感谢
修改
以下是我要添加到用户对象的用户/角色/职责表的模型:
**User Table:**
id (pk)
first_name
last_name
username
password
**Role Table**
id(pk)
role_name
**Responsibility Table**
id(pk)
responsibility_name
**user_roles_membership**
id(pk)
role_id(fk)
user_id(fk)
**roles_responsibilities_membership**
id(pk)
roles_id(fk)
responsibility_id(fk)
答案 0 :(得分:1)
要详细回答这个问题,我需要为你编写完整的代码或详尽的文章 - 我不打算这样做。相反,我会指出你正确的方向。
当用户登录时,获取该用户的所有关联角色和职责。以下代码是from this part文档(阅读整页!)。我不知道你的数据是如何关联的所以我只是在这里猜测。
$this->Auth->authenticate = array(
AuthComponent::ALL => array(
'contain' => array(
'Responsibility',
'Role'
)
),
'Form'
);
在用户立即登录后查看您的会话,您应该在那里看到其他数据。例如,使用DebugKit或调试()会话。
接下来就是编写一个可以处理该数据的自定义授权处理程序。该文档向您展示了如何执行此操作here。
App::uses('BaseAuthorize', 'Controller/Component/Auth');
class MyAuthorize extends BaseAuthorize {
public function authorize($user, CakeRequest $request) {
// Do things for your permission system here.
}
}
在authorize()方法中添加你需要的任何逻辑来检查当前登录用户的权限,作为第一个arg传递,并根据你要在请求中检查的内容进行检查,作为第二个arg传递。
所有这一切都很直接且记录良好on this page。我再次建议您阅读整个页面。你应该明白如何完成这项工作。
另外,在遇到实施问题的情况下,您可能想要提出比这个非常通用的问题更具体的问题。