管理员访问过滤器

时间:2014-12-18 08:30:57

标签: yii

我一直在使用我的Yii应用程序获得这种奇怪的体验。我创建了一个帐户“ admin ”,此管理员创建了一个名为“示例”的其他管理员帐户。现在示例已成功创建并作为管理员添加到自动分配表中。这是用户204是管理员的证据。

enter image description here

检查用户访问权限也证明示例帐户是管理员。但不知何故,当以示例登录时,访问某个控制器的管理功能会返回错误403,但是另一个管理员帐户 admin ,用户0可以正常访问它。这是控制器的访问规则。

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view','update'),
            'users'=>array('*'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete','dynamicUnitName'),
            'users'=>array('admin'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

我的应用程序有什么问题,为什么这样做?

2 个答案:

答案 0 :(得分:1)

您应该使用roles代替usersusers包含用户的名称。有关更多信息,请查看Yii page on access control

array('allow', // allow admin user to perform 'admin' and 'delete' actions
    'actions'=>array('admin','delete','dynamicUnitName'),
    'roles' => array("admin"),
),

答案 1 :(得分:0)

更改

    array('allow', // allow admin user to perform 'admin' and 'delete' actions
        'actions'=>array('admin','delete','dynamicUnitName'),
        'users'=>array('admin'),
    ),

    array('allow', // allow admin user to perform 'admin' and 'delete' actions
        'actions'=>array('admin','delete','dynamicUnitName'),
        'expression' => 'Yii::app()->user->role == "admin"',
    ),