Validar usuario segun el ROL que tiene

Validar usuario segun el ROL que tiene

de Edwin Nuñez -
Número de respuestas: 7

Amigos tengo una pequeña consulta, resulta que quiero validar un usuario segurn el ROl que tiene, me refiero que que segun el rol que tiene ingrese o vea una pagina especifica, ejemplo:

si es administrador o tenga el rol =1 , que ingrese a una pagina externa A

y si es un usuario con rol de estudiantes osea 5 que le visualiza otra pagina externa B

Este mi codigo pero no me resulta hasta ahora, cuan cuando hago la condicion me muestra la pagina A para ambos , que estará mal? Sio tuvieran otra idea por favor se los agradeceria mucho.

 

//obtenemos el contexto del curso a partir de su id
$contexto = get_context_instance(CONTEXT_COURSE,$SESSION->cal_course_referer);

$roles = get_user_roles($contexto, $USER->id);
foreach ($roles as $role) {
echo $role->roleid.'<br />'; // muestro el rol
echo $role->name.'<br />'; // muestro el nombre del usuario
}

///////////////////////////////////

aca hago mi condicion de acuerdo al rol q pertence y direcciono a la pagina,
//////////////////////////////////
if ($role->roleid = 1) {
mostrar pagina externa A
}
else
{
mostrar pagina externa B
}
Promedio de valoraciones: -
En respuesta a Edwin Nuñez

Re: Validar usuario segun el ROL que tiene

de Xavier Paz -

Usa $COURSE->id en vez de $SESSION->cal_course_referer para obtener el contexto.

En respuesta a Xavier Paz

Re: Validar usuario segun el ROL que tiene

de Edwin Nuñez -

no me muestra el resultado deseado, cambie lo que esta en negrita y nada.

cuando ingreso como usuario  que tiene el rol 5 me muestra la pagina externa A.

En realidad me deb enviar a la pagina externa B, quisiera saber que tipo de valor es el roleid (cadena, numero, o booleam )

no si la condicion esta bien (en azul), por favor una solucio o alternativa, gracias.

 

$contexto = get_context_instance(CONTEXT_COURSE,$COURSE->id);
$roles = get_user_roles($contexto, $USER->id);
foreach ($roles as $role) {
echo $role->roleid.'<br />'; // muestro el rol
echo $role->name.'<br />'; // muestro el nombre del usuario
}

///////////////////////////////////

aca hago mi condicion de acuerdo al rol q pertence y direcciono a la pagina,
//////////////////////////////////
if ($role->roleid = 1) {
mostrar pagina externa A
}
else
{
mostrar pagina externa B
}
En respuesta a Edwin Nuñez

Re: Validar usuario segun el ROL que tiene

de Xavier Paz -

Haz un var_dump() de la variable $roles, para ver que contiene, porque sospecho que si el usuario tiene más de un rol, problamente se quede con el último, que puede no corresponderse con el de admin que te interesa procesar.

En respuesta a Edwin Nuñez

Re: Validar usuario segun el ROL que tiene

de juan Diaz -

mmmm igual soy yo que es lunes pero tal y como muestras el codigo la variable $role no existe despues del bucle, o por lo menos no es la del foreach, donde la inicializas?

 

EDIT: vaya vi el dia pero no el mes igual llego un poco tarde sonrisa

En respuesta a juan Diaz

Re: Validar usuario segun el ROL que tiene

de Antonio Herrera Vega -

Buenas, 

Prueba a a ver que te devuelve la variables $roles de la siguiente forma: 

echo '<pre>';

print_r($roles);

echo '</pre>';

die();

De esta forma puedes ver lo que te esta devolviendo la función, te lo digo porque me da a mi que un usuario solo puede tener un rol segun un contexto por tanto el fallo esta al recorrer $roles en un foreach, no lo se seguro pero puede ser. 

Un saludo. 

En respuesta a Edwin Nuñez

Re: Validar usuario segun el ROL que tiene

de Raul Garcia Canet -

Hola Edwin, 

El valor de roleid es un entero.

Pormotro lado.
Si ese es tu código (copiado y pegado), prueba  cambiar la linea de la condición:

if ($role->roleid = 1) {

por
if ($role->roleid == 1) {
 

Espero que te sirva, 

Salu2

J. Raul (juagarc4) guay

 

En respuesta a Edwin Nuñez

Re: Validar usuario segun el ROL que tiene

de Eder dos Santos -

Edwin:

Te sugeriría poner el "if" dentro del "foreach", dado que los usuarios pueden tener más de un rol asignado en el contexto. Algo así:

$contexto = get_context_instance(CONTEXT_COURSE,$COURSE->id);
$roles = get_user_roles($contexto, $USER->id);
$esAdmin = NULL;
foreach ($roles as $role) {
echo $role->roleid.'<br />'; // muestro el rol
echo $role->name.'<br />'; // muestro el nombre del usuario
if ($role->roleid == 1) $esAdmin = 1;

}

if ($esAdmin)
{
mostrar pagina externa A
} else {
mostrar pagina externa B
}

Hay mucha gente a la que no le gusta utilizar flags por cuestiones de elegancia y mantenimiento del código (y tienen razón)...

Lo mejor sería refactorizar este código a futuro, implementando toda esta averiguación como un método / function, haciéndolo reutilizable.

Saludos
Eder