在 CakePHP 3.0 中通过 table 链接模型时如何检索信息?

How to retrieve information when linking models through a table in CakePHP 3.0?

我正在尝试根据 CakePHP 博客教程 (http://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html) 中的模型设置用户访问模型,但角色在单独的 table 中,并通过以下方式链接到用户用户角色 table.

我目前在 Model/Table/UsersTable.php 中有以下内容:

    $this->belongsToMany('Roles', [
        'through' => 'UserRoles'
    ]);

以及 Model/Table/RolesTable.php 中的以下内容:

    $this->belongsToMany('Users', [
        'through' => 'UserRoles'
    ]);

以及 Model/Table/UserRolesTable.php 中的以下内容:

    $this->belongsTo('Users', [
        'foreignKey' => 'user_id'
    ]);
    $this->belongsTo('Roles', [
        'foreignKey' => 'role_id'
    ]);

我创建了查看、创建和管理员角色。我正在尝试弄清楚如何检查用户在 AppController.php 中的一个或多个角色。这是当角色合并到用户对象时给出的简单示例:

public function isAuthorized($user)
{
    // Admin can access every action
    if (isset($user['role']) && $user['role'] === 'admin') {
        return true;
    }

    // Default deny
    return false;
}

我不确定如何访问用户对象并通过 AppController 文件中的用户 ID 获取用户角色。由于用户未直接链接到角色,我如何从 IsAuthorized 函数访问角色信息?当用户角色被另一个 table 链接时,我将如何进行查找以检索用户角色? 谢谢!

在您的控制器中设置 AuthComponent 时,确保您告诉它获取相关数据:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'contain' => ['Roles']
            ]
        ]
    ]);
}