【问题标题】:Yii role access via accessRules without AuthAssignment table通过没有 AuthAssignment 表的 accessRules 访问 Yii 角色
【发布时间】:2014-09-27 08:05:19
【问题描述】:

Yii 框架 1.1.14

我在控制器中设置了以下内容:

public function accessRules()
{
    return array(

        array(
            'deny', 
            'controllers' => array(
                'site',
                'hotels',
                'channels'
            ),
            'roles' => array('General')
        )

    );
}

我创建了一个名为 CDbAuthManagerExtension 的自定义 CDbAuthManager,在 config/main.php 中声明:

    'authManager' => array(
        'class' => 'CDbAuthManagerExtension',
        'connectionID' => 'db'
    ),

在 CDbAuthManagerExtension 中,我声明了我的 getRoles($user_id) 函数。

但是当我运行代码时出现以下错误:

    CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'h2g.AuthAssignment' doesn't exist. The SQL statement executed was: SELECT *
FROM `AuthAssignment`
WHERE userid=:userid

我不想设置 AuthAssignments 表,当我在 accessRules 功能?有谁知道如何阻止它寻找 AuthAssignments 表?

【问题讨论】:

    标签: php yii access-control


    【解决方案1】:

    您正在使用 DbAuthManger 意味着它必须查找数据库表来获取分配,它不是在寻找角色,而是在寻找角色分配给用户并确定当前用户是否具有根据分配给他的角色和允许操作的角色计算的授权both

    如果您不想为表使用名称 AuthAssigment 并使用另一个表,您可以像这样在配置中指定它

     'authManager' => array(
            'class' => 'CDbAuthManagerExtension',
            'connectionID' => 'db'
            'assignmentTable'=>'MyCustomTable'
        ),
    

    还有另外两个表,您可以修改它们的位置以及阅读 CDbAuthManager doc here

    如果你根本不希望有一个表,那么你不应该使用DbAuthManager,而是使用PHPAuthManager,它将分配数据作为一个数组存储在一个php文件中。由 CPhpAuthManager 配置,请参阅文档here。您可以使用自定义扩展此类并在您的配置中使用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多