Buenos dias.
Ya tengo hecha la autenticación contra la base de datos y funciona perfecto.
La tengo hecha con 3 campos (CIF EMPRESA, NIF OPERADOR, CONTRASEÑA).
CIF y NIF los guardo en la sesión con setState.
NIF OPERADOR es el original username: Yii::app()->user->getState(‘username’)
Ahora estoy con el tema de la autorización por roles. No me los reconoce. Lo que tengo hecho es lo siguiente:
-
Ya tengo en mi base de datos las 3 tablas AuthItem, AuthItemChild y AuthAssignment, con sus registros correspondientes (insertados desde phpmyadmin o script sql ejecutado desde consola). Por supuesto empleé la estructura de tablas según el framework Yii.
-
También tengo activado RBAC en protected/config/main.php
// uncomment the following to use a MySQL database
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=ejemplo',
'emulatePrepare' => true,
'username' => 'miusername',
'password' => 'mipassword',
'charset' => 'utf8',
),
// AÑADO ESTO PARA ACTIVAR CONTROL ACCESO BASADO EN ROLES...
'authManager'=>array(
'class'=>'CDbAuthManager', // ...almacenados en BD (CDbAuthManager)
'connectionID'=>'db',
),
- Y en UsuariosController.php tengo de momento, para ver si funciona, lo siguiente:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('admin','index','view','create','read','update','delete'),
'roles'=>array('superadmin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
Cuando me autentico con CIF EMPRESA, NIF OPERADOR, CONTRASEÑA entro perfecto pero la autorización falla pues me deniega el acceso. ¿Por qué no reconoce rol ‘superadmin’? y eso que estoy en la tabla ‘AuthAssignment’. Tanto en la empresa 1 (A1111111A), como en la empresa 2 (B2222222B), y con mi NIF a continuación.
Te muestro el resto de registros en las tablas Auth:
Registros en AuthAssignment:
itemname userid bizrule data
superadmin A1111111A25252525L NULL NULL
superadmin B2222222B25252525L NULL NULL
admin A1111111A11111111L NULL NULL
admin B2222222B44444444L NULL NULL
lector A1111111A33333333L NULL NULL
lector B2222222B66666666L NULL NULL
operador A1111111A22222222L NULL NULL
operador B2222222B55555555L NULL NULL
Como puedes ver, asigno el rol ‘superadmin’ a dos usuarios entre otros (pero eso entiendo que se puede hacer)
El campo ‘userid’ se compone de la concatenación de ‘CIF EMPRESA + NIF USUARIO’ y lo tengo guardado en la sesión, cuando el usuario se autentifica con CIF EMPRESA, NIF USUARIO y CONTRASEÑA.
El campo userid, corríjeme si me equivoco, es el nombre que el usuario ha utilizado para acceder a la aplicación. Lo que no se hacer es que la AUTORIZACIÓN DE YII entienda que userid es concatenación de lo que he guardado en la sesión. Agradecería sugerencias.
Aunque para hacer pruebas he modificado el userid de la tabla AuthAssignment, quedando asi…
itemname userid bizrule data
superadmin 25252525L NULL NULL
superadmin 25252525L NULL NULL
admin A1111111A11111111L NULL NULL
admin B2222222B44444444L NULL NULL
lector A1111111A33333333L NULL NULL
lector B2222222B66666666L NULL NULL
operador A1111111A22222222L NULL NULL
operador B2222222B55555555L NULL NULL
…pero tampoco funciona.
REGISTROS EN RESTO DE TABLAS Auth:
Registros en AuthItem:
name type description bizrule data
superadmin 2 NULL NULL NULL
admin 2 NULL NULL NULL
operador 2 NULL NULL NULL
lector 2 NULL NULL NULL
create 0 NULL NULL NULL
read 0 NULL NULL NULL
update 0 NULL NULL NULL
delete 0 NULL NULL NULL
Registros en AuthItemChild:
parent child
superadmin admin
admin operador
operador lector
No se que es lo que estoy haciendo mal.
Agradecería ayuda.
Muchas gracias.