Доступ к роли Yii через accessRules без таблицы AuthAssignment

Yii Framework 1.1.14

Я установил следующее в моем контроллере:

public function accessRules()
{
return array(

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

);
}

Я создал собственный CDbAuthManager под названием CDbAuthManagerExtension, объявлено в 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?

1

Решение

Вы используете DbAuthManger это означает, что он должен искать таблицу БД для получения назначений, он не ищет роли как таковые, он ищет назначения ролей пользователям и определяет, были ли у текущего пользователя вычислены полномочия. и то и другое на основе назначенных ему ролей и ролей, которым разрешено действие.

Если вы не хотите использовать имя AuthAssigment для таблицы и использовать другую таблицу, вы можете указать это в вашей конфигурации, как это

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

Есть две другие таблицы, которые вы можете изменить их расположение, а также прочитать CDbAuthManager doc Вот

Если вы однако не хочу иметь стол вообще тогда вы не должны использовать DbAuthManager и использовать PHPAuthManager, который хранит данные назначения в файле php в виде массива. Он настраивается с помощью CPhpAuthManager см. документ Вот. Вы можете расширить этот класс с вашими настройками и использовать его в вашей конфигурации вместо

0

Другие решения

Других решений пока нет …