向CakePHP身份验证组件添加多个角色

向CakePHP身份验证组件添加多个角色,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我正在使用本教程向我的应用程序添加身份验证和授权组件 问题是,我找到的所有教程都假设用户只有一个角色。在附加的视频中,角色只是用户表中的一个枚举字段。我有三张桌子: 用户表 角色表 责任表 链接角色和职责的表 链接用户和角色的表 我让登录过程正常工作,直到获得登录用户的角色。最好的方法是什么?有人知道有一个教程也包括这个吗?我用的是蛋糕2.5.2 我可以发布任何你可能认为相关的代码,但我在视频中有很多内容。此外,代码的许多内部工作似乎都被隐藏了。任何建议都很好 谢谢 编辑 以下是我希望添加到us

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

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

  • 用户表
  • 角色表
  • 责任表
  • 链接角色和职责的表
  • 链接用户和角色的表
  • 我让登录过程正常工作,直到获得登录用户的角色。最好的方法是什么?有人知道有一个教程也包括这个吗?我用的是蛋糕2.5.2

    我可以发布任何你可能认为相关的代码,但我在视频中有很多内容。此外,代码的许多内部工作似乎都被隐藏了。任何建议都很好

    谢谢

    编辑

    以下是我希望添加到users对象的用户/角色/职责表的模型:

    **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)
    

    要详细回答这个问题,我需要为您编写完整的代码或一篇详尽的文章——我不会这么做。相反,我会给你指出正确的方向

    用户登录后,获取该用户的所有相关角色和职责。以下代码取自文档(请阅读整页!)。我不知道你的数据是如何关联的,所以我只是在这里猜测

    $this->Auth->authenticate = array(
        AuthComponent::ALL => array(
            'contain' => array(
                'Responsibility',
                'Role'
            )
        ),
        'Form'
    );
    
    在用户现在登录后查看您的会话,您应该会在那里看到附加数据。例如,使用DebugKit或debug()调试会话

    下一件事是编写一个定制的授权处理程序来处理该数据。文档向您展示了如何做到这一点

    在authorize()方法中,添加检查当前登录用户(作为第一个参数传递)权限所需的任何逻辑,并根据您希望在请求中检查的任何逻辑(作为第二个参数传递)检查权限

    所有这些都是非常直截了当的,并且有很好的文档记录。同样,我建议你阅读整页。这对你来说应该是显而易见的,然后如何做到这一点


    此外,如果您在实施过程中遇到问题,您可能需要提出一个比这个非常普通的问题更具体的问题。

    至少对多角色部分可能有帮助。责任可以使用控制器或组件单独处理。很抱歉没有尽快响应。谢谢你的回复。我相信我已经阅读了您的建议,但我仍然存在一些问题,包括用户会话对象的角色/职责值。当我调试时,我可以在This->Controller->Auth->authenticate->all->contain对象中看到“Responsibility”和“Role”,但不能看到实际关联的值。您提供的代码是否应该从数据库中提取这些数据并将其插入会话中?
    App::uses('BaseAuthorize', 'Controller/Component/Auth');
    
    class MyAuthorize extends BaseAuthorize {
        public function authorize($user, CakeRequest $request) {
            // Do things for your permission system here.
        }
    }