Foros del Web » Programando para Internet » PHP »

[APORTE] Gestión de usuarios bit a bit

Estas en el tema de [APORTE] Gestión de usuarios bit a bit en el foro de PHP en Foros del Web. Definición de sistema de gestión de usuarios http://www.hydrae.net/servicios-sagi...arios-y-grupos Definición de operadores bit a bit http://www.litfuel.net/tutorials/bitwise.htm Nota: Recomiendo que lean este enlace, ya que no brindaré ...
  #1 (permalink)  
Antiguo 07/08/2010, 15:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 8 meses
Puntos: 1517
[APORTE] Gestión de usuarios bit a bit

Definición de sistema de gestión de usuarios
Definición de operadores bit a bitNota: Recomiendo que lean este enlace, ya que no brindaré información al respecto en este aporte y es importante tener claro qué es lo que hacen los operadores bit a bit (especialmente el de AND => &) para poder entender cómo funciona este sistema de gestión de usuarios con operadores bit a bit.

Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Definir los permisos en constantes
  4.  */
  5. define('ACCESS_VIEW',1);
  6. define('ACCESS_ADD',2);
  7. define('ACCESS_EDIT',4);
  8. define('ACCESS_CREATE',8);
  9. define('ACCESS_ADMIN',16);
  10.  
  11. /**
  12.  * Para dar permisos solo tienes que sumar los bits
  13.  * En la siguiente variable tiene permiso para ver y crear
  14.  * va a tener un valor de 9 (1 => ACCESS_VIEW + 8 => ACCESS_CREATE)
  15.  * Para un usuario que quieras que vea todo, debes sumar todos los
  16.  * valores.  En este caso sería un total de 31
  17.  */
  18. //$access = 31; //Puede acceder a todo
  19. $access = 9;
  20.  
  21. /**
  22.  * Función para verificar si tiene los permisos
  23.  */
  24. function getAccess($bit1, $bit2){
  25.     return (((int)$bit1 & (int)$bit2) == 0) ? false : true;
  26. }
  27.  
  28.  
  29. if(getAccess($access, ACCESS_VIEW))
  30.     echo 'Tiene permisos de ver <br />';
  31. else
  32.     echo 'No tiene permisos de ver <br />';
  33.  
  34. if(getAccess($access, ACCESS_ADD))
  35.     echo 'Tiene permisos de añadir <br />';
  36. else
  37.     echo 'No tiene permisos de añadir <br />';
  38.  
  39. if(getAccess($access, ACCESS_EDIT))
  40.     echo 'Tiene permisos de editar <br />';
  41. else
  42.     echo 'No tiene permisos de editar <br />';
  43.  
  44. if(getAccess($access, ACCESS_CREATE))
  45.     echo 'Tiene permisos de crear <br />';
  46. else
  47.     echo 'No tiene permisos de crear <br />';
  48.  
  49. if(getAccess($access, ACCESS_ADMIN))
  50.     echo 'Tiene permisos de administrar <br />';
  51. else
  52.     echo 'No tiene permisos de administrar <br />';
Esta forma de hacerlo es buena si deseas que el usuario que crees entre a una parte específica de la aplicación.

Otra forma de usar este tipo de gestión de usuarios (no recomendado) es otorgando el permiso de acuerdo al rol. Es decir si el usuario tiene permiso de administrar, puede ver todo. La forma como lo puedes lograr es usando el símbolo de >=.
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Definir los permisos en constantes
  4.  */
  5. define('ACCESS_VIEW',1);
  6. define('ACCESS_ADD',2);
  7. define('ACCESS_EDIT',4);
  8. define('ACCESS_CREATE',8);
  9. define('ACCESS_ADMIN',16);
  10.  
  11. /**
  12.  * Para dar permisos solo tienes que indicar el bit que le corresponde
  13.  * En la siguiente variable tiene permiso para ver, añadir y editar
  14.  * va a tener un valor de 4 (4 => ACCESS_EDIT)
  15.  * Para un usuario que quieras que vea todo, debe tener el valor mayor,
  16.  * en este caso es 16 que es el de administrar
  17.  */
  18. //$access = 16; //Puede acceder a todo
  19. $access = 4;
  20.  
  21. if($access >= ACCESS_ADMIN)
  22.     echo 'Tiene permisos de administrar <br />';
  23. else
  24.     echo 'No tiene permisos de administrar <br />';
  25.  
  26. if($access >= ACCESS_CREATE)
  27.     echo 'Tiene permisos de crear <br />';
  28. else
  29.     echo 'No tiene permisos de crear <br />';
  30.  
  31. if($access >= ACCESS_EDIT)
  32.     echo 'Tiene permisos de editar <br />';
  33. else
  34.     echo 'No tiene permisos de editar <br />';
  35.  
  36. if($access >= ACCESS_ADD)
  37.     echo 'Tiene permisos de añadir <br />';
  38. else
  39.     echo 'No tiene permisos de añadir <br />';
  40.  
  41. if($access >= ACCESS_VIEW)
  42.     echo 'Tiene permisos de ver <br />';
  43. else
  44.     echo 'No tiene permisos de ver <br />';
El usarlo de esta forma se pierde el sentido de usar la gestión de usuarios con los operadores bit a bit. Ya que también esta forma se puede usar con tan solo indicar números corridos como 1, 2, 3, 4 y 5.

Edito:
Si tienen otro método, no duden en colocarlo, será de beneficio para muchos
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 08/08/2010 a las 00:26
  #2 (permalink)  
Antiguo 07/08/2010, 16:10
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 9 años, 9 meses
Puntos: 25
Respuesta: [APORTE] Gestión de usuarios bit a bit

Muy Simple y Claro, Gracias :D
  #3 (permalink)  
Antiguo 07/08/2010, 18:34
Avatar de ylellan  
Fecha de Ingreso: mayo-2010
Ubicación: en un lugar de Veracruz
Mensajes: 432
Antigüedad: 9 años, 8 meses
Puntos: 36
Respuesta: [APORTE] Gestión de usuarios bit a bit

eres grandioso corazon, muy practico y facil de entender. besos
  #4 (permalink)  
Antiguo 23/08/2010, 16:53
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 11 años, 8 meses
Puntos: 12
Respuesta: [APORTE] Gestión de usuarios bit a bit

entonces si yo quisiera agregar mas accesos tendria que ir 32,64,128 ... etc ?
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #5 (permalink)  
Antiguo 23/08/2010, 17:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: [APORTE] Gestión de usuarios bit a bit

Cita:
Iniciado por ylellan Ver Mensaje
eres grandioso corazon, muy practico y facil de entender. besos
que bueno, porque yo no entendí nada!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 23/08/2010, 18:10
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 11 años, 8 meses
Puntos: 12
Respuesta: [APORTE] Gestión de usuarios bit a bit

Cita:
Iniciado por pateketrueke Ver Mensaje
que bueno, porque yo no entendí nada!!
Lol esta buena buena guia supongo que estas webiando XD jajajajaj
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #7 (permalink)  
Antiguo 23/08/2010, 19:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 8 meses
Puntos: 1517
Respuesta: [APORTE] Gestión de usuarios bit a bit

Cita:
Iniciado por pateketrueke Ver Mensaje
que bueno, porque yo no entendí nada!!
Yo tampoco por eso no lo explique Son bromas
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 23/08/2010, 20:27
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: [APORTE] Gestión de usuarios bit a bit

Buena guia! y esto viene a colacion del post que hizo otro usuario de fdw sobre una pagina dental! jaja!

un abrazo!
  #9 (permalink)  
Antiguo 23/08/2010, 20:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 8 meses
Puntos: 1517
Respuesta: [APORTE] Gestión de usuarios bit a bit

Cita:
Iniciado por xalupeao Ver Mensaje
entonces si yo quisiera agregar mas accesos tendria que ir 32,64,128 ... etc ?
Exacto
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 24/08/2010, 06:35
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: [APORTE] Gestión de usuarios bit a bit

la verdad es que me gusta esto, en un momento quise hacer algo similar pero como sigo siendo novatoide lo hice de otra forma, no se si es mejor o peor, pero bueno es lo que me salio.

cree en la base de datos junto a todos los usuarios regulares una apartado que era USR_LVL en el cual si USR_LVL == 0 era un usuario normal si USR_LVL == 1 era admin, y chekeaba eso luego del
Código PHP:
Ver original
  1. session_start(); if($_SESSION['LVL']==1){.......}else if($_SESSION['lvl']==0){.....};
algo asi

no se si esta bien o mal la forma en la cual lo hice, creo que es media insegura pero no tengo forma de comprobarlo!

un abrazo
  #11 (permalink)  
Antiguo 02/01/2011, 04:28
 
Fecha de Ingreso: julio-2010
Mensajes: 84
Antigüedad: 9 años, 6 meses
Puntos: 7
Respuesta: [APORTE] Gestión de usuarios bit a bit

Cita:
Iniciado por kadas99 Ver Mensaje
la verdad es que me gusta esto, en un momento quise hacer algo similar pero como sigo siendo novatoide lo hice de otra forma, no se si es mejor o peor, pero bueno es lo que me salio.

cree en la base de datos junto a todos los usuarios regulares una apartado que era USR_LVL en el cual si USR_LVL == 0 era un usuario normal si USR_LVL == 1 era admin, y chekeaba eso luego del
Código PHP:
Ver original
  1. session_start(); if($_SESSION['LVL']==1){.......}else if($_SESSION['lvl']==0){.....};
algo asi

no se si esta bien o mal la forma en la cual lo hice, creo que es media insegura pero no tengo forma de comprobarlo!

un abrazo
Hola amigo, un abrazo!, este tipo de soluciones son las que nos hacen aprender, son poco practicas y le damos mil vueltas al asunto, pero creo que nos dejan enseñanza. Obviamente el sistema que aquí se muestra es mucho mejor, pero refiriendo tu caso especifico, y ya que solo guardas un numero 0 o 1, me parece que en el MySQL, podrías dejar el campo como campo booleano, de esa forma ahorrarlas mucho espacio en la BD y a la hora de la comprobación solo deberías hacer lo siguiente:

Código PHP:
Ver original
  1. session_start(); if($_SESSION['LVL']){.......}else {.....};
Debido que al ser valor booleano no necesitas comprobar por 1, con solo llamarlo devolverá 1 de serlo y 0 de no serlo, en el else pues es solo ya que de no ser 1 deberia ser 0.

Espero haber sido claro, no digo que sea una buena forma, pero creo que en determinados casos a alguno le servirá esto.
Yo lo utilizo en un sistema de noticias de una revista, ya que aveces me piden que esconda ciertos artículos y aveces los muestre, entonces guardo en un valor booleano el estado "publico". Y así antes de mostrar un articulo de dicha revista hago la comprobación mas o menos así:
Código PHP:
Ver original
  1. if($publico) {...}
Espero no desviarme mucho, si es así pido disculpas y agradezco a los administradores su comprensión y ya será movido a un mejor tema este mensaje. Gracias y Feliz Año!

Etiquetas: aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 5 personas




La zona horaria es GMT -6. Ahora son las 08:39.