向CakePHP Auth Component添加多个角色

时间:2014-06-22 18:57:42

标签: cakephp cakephp-2.3

我正在使用本教程向我的应用添加身份验证和授权组件。

问题在于我发现的所有教程都只假设用户只有一个角色。在附加的视频中,角色只是users表中的枚举字段。我有三张桌子:

  1. 用户表
  2. 角色表
  3. 责任表
  4. 链接角色和职责的表格
  5. 用于链接用户和角色的表格
  6. 我正在登录过程中工作,直到获取登录用户的角色。这样做的最佳方法是什么?有没有人知道包含这个的教程?我正在使用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)
    

    Simple Cake Authentication and Authorization

1 个答案:

答案 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。我再次建议您阅读整个页面。你应该明白如何完成这项工作。

另外,在遇到实施问题的情况下,您可能想要提出比这个非常通用的问题更具体的问题。