php sessiones y niveles de usuario

Estado
Cerrado para nuevas respuestas.

tafkle

Lanero Reconocido
11 May 2002
192
Hla.
me gustaria saber como manejan aqui en laneros el sunto de los permisos de usuario.
es decir si tienen unn ainterfaz para los administradores para que ellos puedan crear eventos editar cosas, etc.
O si por el contrario es lamisma interfaz que todos vemos y al momento de realizazr unaaccion evaluan permisos de usuarios, no se , talvez mediante uun valor en la session.
Espero la respuesta pronta y apropiada especialmente de juliand
By Tafkle
 
Efectivamente, mi amigo tafkle, en LANeros.com contamos con varios paneles administrativos especiales en donde contamos con todas las opciones para menajar el sitio... Cosas como mover mensaje, editar mensajes, borrar mensajes, editar encuestas, poner noticias, todo se hace básicamente por la misma interface que ustedes conocen, sólo que a los que tienen permiso, les aparecen nuevas opciones y no les sale la odiosa pantalla NO TIENE PERMISOS PARA VER ESTA PÁGINA....


Por otra parte, hay páneles administrativos en donde generalmente se encuentra todo lo que son opciones... Para editar la configuración del software, editar un usuario, agregar una nueva sección de foros, etc.... A este panel si se necesita permisos de administrador para poder ingresar, aunque es aburrido y largo, con una cantidad de opciones impresionantes que parece que te pierdes en él.

El otrol panel con el que contamos, es el de nuestro servidor... ahí están todas las opciones para crear cuentas de email y POP3, administrar las bases de datos, passwords, dominios, ver estadísticas, cuentas FTP, etc... La capa de seguridad de este panel es distinta a la de los foros, pero es importante mantener esa sección segura... pues cualquier persona que entre a ese panel, con los conocimientos suficientes, puede hacer un... "takeover" a la página... pero eso es otro asunto...

La cuestión de los permisos, es muy sencilla... El software automáticamente cuando vos cargas cualquier página, carga en memoria los permisos que vos tenes en tu sesión.. Osea, yo puedo estar navegando la página como Invitado, y aún siendo yo el administrador de LANeros.com, si el software no tiene dicho que mi sesión tiene permisos administrativos, veré lo mismo que cualquier invitado que entre a la página... PEro al yo loguearme con mi password, el software guarda en memoria los permisos que tengo... Entonces, cuando se necesita ver una página administrativa, existe una condicional que básicamente lo que hace es "frenarme" si no existen permisos administrativos:

PHP:
if ( $permisos['administrador'] == false )
{
  mostrar_nopermiso();
  exit;
}

// resto del contenido del script
.
.
.

Eso es básicamente lo que sucede cuando aparece el NO TIENES PERMISOS.... Como el elemento 'administrador' del vector permisos estaba en false, se supone que esa sesión no tiene permisos de administrar, por lo tanto, muestra la pantalla de error, y se sale del programa....

Fácil, no?
 
Ummm.... Viendo bien el ejemplo que te di, existe otra forma muy útil de conocer los permisos de mi sesión... Hace poco aprendí a utilizarlos y de verdad que estoy seguro que le servirá a cualquier persona que programe:

Se trata de las funciones tipo bit. No se si hayan visto los operadores bit, cosas como el & (y no es el &&), el |, el ^, el ~, el << y el >>... Estoy hablando de PHP, no se si en otros lenguajes cambien

Entonces, por ejemplo, cada permiso en el sistema tiene un valor, este valor tiene que ir en la secuencia 1, 2, 4, 8, 16, 32, etc... Se acuerdan de los números binarios? :p

Entonces, por ejemplo esto:

Código:
Permiso             Valor

ES_INVITADO           1
ES_MIEMBRO            2
ES_MODERADOR          4
ES_SUPERMODERADOR     8
ES_ADMINISTRADOR      16

Si o que, entonces si alguien es Miembro, pero a la vez es Moderador, sus permisos se suman y da 6 (ES_MIEMBRO + ES_MODERADOR = 6)... Hast ahi bien...

Entonces, los permisos del usuario que es miembro y es moderador, suman el número 6 (ese número está guardado en la base de datos)... Pero si yo quiero saber si ese usuario es moderador, como hago para saber? Fácil... Hago una operación de tipo bit de esta forma:

PHP:
//SE SUPONE QUE $usuario['permisos'] tiene un 6
// y ES_MODERADOR tiene un 4
if (($usuario['permisos'] & ES_MODERADOR) == true)
{
  //este tipo es moderador... UFFFFF hehehe
  //resto del script
}

Creo que es un poquito enredado para los que apenas empiezan.. pero les recomiendo entonces que se lean el capítulo de operadores bitwise de PHP o de cualquier otro libro, para que aprendan como funcionan... Son bastante útiles..

Creo que en otros lenguajes les llaman también "Flags"... Espero que te ayuden en algo :)
 
Siguiendo el hilo.
Muy interesante!!!
Sin embargo hay algo muy importante aki...
Una vez alguien ha validado su login y password en un explorador, iexplorer, por decir algo, cualquier explorador qu ehabra de ahi en adelante podra accededr a las paginas restrigidas, que son validadas por los permisos de session.
Puedo tener control sobre eso?
offtopic:
Hay alguna forma de saber cuando alguien ha cerrado el iexplorer por ejemplo?
By Tafkle
 
Abusando algo ded la confianza, y puesto que apenas caigo en cuenta...
el array $permisos['administrador'] no tiene que ver conla session, debo asumir que es global?
Como es el manejo de ese array para que persista entre peticion y peticion?
By tafkle
 
Haber lo explico. Básicamente hay 3 formas de mantener la sesión entre peticiones.

La primera, la más común, por cookies que se guardan en tu PC y tienen una fecha de expiración de un año.

La segunda, por cookies en tu PC que tienen fecha de expiración por la sesión actual (apenas se cierra el explorer, o pasados 5 minutos de no tener actividad, se borran)

La tercera, manteniendo el número de sesión por url, este método es para personas que no pueden utilizar cookies... Aún se les permite navegar el sitio, aunque aquí en LANeros no funciona por unas razoncitas.

Entonces, es verdad, cuando te logueas con un explorer, lo que se hace es guardar una cookie (que es básicamente un archivo que contiene tu userid y tu password). De ahi en adelante, cualquier explorador que se abra, tendrá acceso a esa cookie y por ende, estará logueado.

Entonces, siempre y cuando en el equipo donde se esté navegando la página, exista esta cookie, pues todos los exploradores tendrán el nivel de permisos que tenga asignada la información que hay en esa cookie...

Por lo del offtopic,... nosotros no tenemos el control de saber si un explorador se ha cerrado o no... No es posible con el protocolo HTTP.
 
Originalmente colocado por tafkle
Abusando algo ded la confianza, y puesto que apenas caigo en cuenta...
el array $permisos['administrador'] no tiene que ver conla session, debo asumir que es global?
Como es el manejo de ese array para que persista entre peticion y peticion?
By tafkle

No, no tiene nada que ver..

En la información de sesión sólo se encuentra el número de sesión, tu userid y tu password encriptado... Esa información se valida contra la base de datos, y si es correcta y dependiendo del nivel de permisos que haya en la base de datos, es que se construye el array $permisos :)
 
Bacano conocer un poco el funcionamiento de LANeros.com, aunque los métodos mostrados son de uso común (al menos la idea) al trabajar con sistemas de log-in y sesiones en PHP.

Sesiones/cookies es de los temas más interesantes en la programación de aplicaciones del lado del servidor... y en PHP rlz! =)
 
Estado
Cerrado para nuevas respuestas.

Los últimos temas