Foros del Web » Programando para Internet » PHP »

Perfiles de usuario

Estas en el tema de Perfiles de usuario en el foro de PHP en Foros del Web. Estimados todos estoy entrando en la programación php y los quiero molestar, lo que ocurre es que quiero hacer una aplicación en la cual existan ...
  #1 (permalink)  
Antiguo 06/06/2007, 10:37
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Perfiles de usuario

Estimados todos estoy entrando en la programación php y los quiero molestar, lo que ocurre es que quiero hacer una aplicación en la cual existan dos tipos de usuarios, por un lado los "Administradores" y por el otro los "Usuarios normales"...

Ahora lo que quiero aprender a hacer para poder implementarlo, es saber como se puede hacer para que dependiendo del tipo de usuario que sea se ingrese a distintos menus...

No sé si se comprende bien lo que quiero hacer...

Ya muchachos, espero poder contar con ustedes...

Saludos a todos...

Atte

JPZ
  #2 (permalink)  
Antiguo 06/06/2007, 10:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Perfiles de usuario

En tu tabla de usuarios tienes que tener un campo que te indique el nivel o el rol del usuarios asi le puedes dar los permisos necesarios y con el rol que tengan imprimir ej:
Código PHP:
if( $user['rol'] == ADMINISTRADOR ) {
     echo 
"link de admin";
} else {
     echo 
"link de usuario";

Claro lo ideal es mejor usar constantes de permisos para poder decidir si un usuario tiene o no permisos para ciertas cosas.

Saludos.
  #3 (permalink)  
Antiguo 06/06/2007, 11:19
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Perfiles de usuario

Si había pensado en hacerlo de esa forma, pero me pregunté. Existirá una mejor forma de hacerlo?

De todos modos, muchas gracias por tu respuesta...

Atte.
JP
  #4 (permalink)  
Antiguo 06/06/2007, 11:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Perfiles de usuario

La mejor forma son los permisos usando constantes, pero es mas avanzado, yo te recomiendo si estas empezando utilizar esa forma.

Saludos.
  #5 (permalink)  
Antiguo 06/06/2007, 11:32
 
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Perfiles de usuario

Cita:
Iniciado por GatorV Ver Mensaje
La mejor forma son los permisos usando constantes, pero es mas avanzado...
¿Cómo sería eso, GatorV?

Gracias.
  #6 (permalink)  
Antiguo 06/06/2007, 11:37
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Perfiles de usuario

Cita:
Iniciado por GatorV Ver Mensaje
La mejor forma son los permisos usando constantes, pero es mas avanzado, yo te recomiendo si estas empezando utilizar esa forma.

Saludos.
Ok, me queda muy claro, pero como funciona o donde puedo conseguir información sobre esto...?

Gracias de nuevo, te pasaste..
  #7 (permalink)  
Antiguo 06/06/2007, 11:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Perfiles de usuario

Puedes tener constantes en una clase ej:
Código PHP:
class Permission {
     const 
CAN_NONE 0;
     const 
CAN_SEE 1;
     const 
CAN_EDIT 2;
     const 
CAN_DELETE 4;
     const 
CAN_DOWNLOAD 8;

Luego checas en contra de los permisos si puede hacer o no cierta tarea ej:
Código PHP:
if( ( Permission::CAN_EDIT $user->permissions ) == Permission::CAN_EDIT ) {
      echo 
"Link to edit";

Asi puedes darle ciertos permisos al usuario por decir si le das el permiso de 3, es decir que puede ver y editar pero no borrar, un permiso de 7 puede ver, editar y borrar, un permiso de 1 solo puede ver y permiso de 2 puede solo editar.

Espero haya sido claro.

Saludos.
  #8 (permalink)  
Antiguo 06/06/2007, 11:44
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Perfiles de usuario

Excelente, muchisimas gracias, te agradezco enormemente que respondieras tan rápido..

Ha, y Saludos nuevamente...
  #9 (permalink)  
Antiguo 06/06/2007, 12:31
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 3 meses
Puntos: 5
Re: Perfiles de usuario

Hola a todos:

En estos momentos estoy desarrollando un sistema con perfiles, de acuerdo al perfil que ingresa, es el menú que construyo, claro está que no al nivel de gatorV, es decir sin permisos de lectura, escritura (suena interesante esto.... ).

Para esto, lee de una tabla los permisos asociados al perfil, y segun esto construyo el menú....

Para mí ha sido una buena forma de implementar accesos de acuerdo al perfil logueado.

Espero que sirve..

Hasta Luego .-
  #10 (permalink)  
Antiguo 06/06/2007, 13:22
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Perfiles de usuario

Cita:
Iniciado por lucasarts_18 Ver Mensaje
Hola a todos:

En estos momentos estoy desarrollando un sistema con perfiles, de acuerdo al perfil que ingresa, es el menú que construyo, claro está que no al nivel de gatorV, es decir sin permisos de lectura, escritura (suena interesante esto.... ).

Para esto, lee de una tabla los permisos asociados al perfil, y segun esto construyo el menú....

Para mí ha sido una buena forma de implementar accesos de acuerdo al perfil logueado.

Espero que sirve..

Hasta Luego .-

Disculpa, podrías ser un poco mas específico o explicar un poquito más sobre este sistema...?

Te lo agradecería mucho...

Saludos

  #11 (permalink)  
Antiguo 06/06/2007, 13:29
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 3 meses
Puntos: 5
Re: Perfiles de usuario

Cita:
Iniciado por jpzapatas Ver Mensaje
Disculpa, podrías ser un poco mas específico o explicar un poquito más sobre este sistema...?

Te lo agradecería mucho...

Saludos
Por supuesto, ahora no puedo porque me encuentro en el trabajo, no tengo los fuentes a la mano, pero al llegar a casa, te subo las estructura de tablas y te explico mejor como hacer un menú dinamico de acuerdo al perfil ingresado.

Hasta Luego .-
  #12 (permalink)  
Antiguo 06/06/2007, 13:33
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Perfiles de usuario

Cita:
Iniciado por lucasarts_18 Ver Mensaje
Por supuesto, ahora no puedo porque me encuentro en el trabajo, no tengo los fuentes a la mano, pero al llegar a casa, te subo las estructura de tablas y te explico mejor como hacer un menú dinamico de acuerdo al perfil ingresado.

Hasta Luego .-
Te pasaste eres extraordinariamente amable

Te lo agradezco de verdad...

Saludos
__________________
El ignorante afirma, el sabio duda y reflexiona.
Aristóteles
  #13 (permalink)  
Antiguo 06/06/2007, 21:39
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 3 meses
Puntos: 5
Re: Perfiles de usuario

Hola:

Volviendo a lo prometido, dependiendo de como quieres el acceso mediante perfiles es como debes configurar ciertas tablas, en mi caso un usuario puede tener mas de un perfil asociado y, un perfil puede tener 1 o mas menús asociados, hasta aquí todo bien, estas son las tablas.

Tabla Usuarios:
  • IdUsuario, Entero
  • NomUsuario, Cadena
  • Password, Cadena

Tabla Perfiles
  • IdPerfil, Entero
  • NomPerfil, Cadena

Hasta aquí tenemos nuestras tablas básicas de perfiles y usuarios.

Ahora la tabla menú, importante ya que guarda las rutas relativas de los archivos php para generar todas las opciones, es decir comprende todas las acciones del menú del sistema.

Tabla Menús
  • IdMenu, Entero
  • NomMenu, Cadena
  • Url, Cadena
  • Grupo, Cadena

El campo url contiene la ruta al archivo php, ej: mant/mant_usuarios.php y grupo es una manera de agrupar los archivos de acuerdo a los contenedores del sistema, ej: un grupo puede ser mantención, este grupo tiene mantención de perfiles y mantención de usuarios (mant_usuarios.php y mant_perfiles.php)

Ahora las tablas de unión( llamese como quiera!!)

Tabla Usuarios_Perfiles
  • IdUsuario, Entero
  • IdPerfil, Cadena

Tabla Perfiles_Menus
  • IdPerfil, Entero
  • IdMenu, Cadena

Con esto ya podemos tener a un usuario con un determinado perfil y, este perfil puede tener acceso a ciertos menús.

¿Cómo construir un menú dinámico?, pues con un simple select y pintado en un enlace las url leídas de la base de datos, específicamente de la tabla menús.

Ej:

Código PHP:
$resultPadre mysql_query("select distinct m.grupo
                                     from perfiles p
                                     inner join
                                       perfiles_menus mp on p.idperfil = mp.idperfil
                                     inner join menus m on mp.idmenu = m.idmenu
                                     where p.idperfil = $idPerfil"
,$link); 
Con esto se leen los contenedores del sistema.

Código PHP:
$resultHijo mysql_query("select m.*
                                    from perfiles_menus pm
                                       inner join menus m on pm.idmenu = m.idmenu
                                    where pm.idperfil = $idPerfil
                                       and m.grupo = '$rowGrupo'"
,$link); 

Con este query se leen todos los menus de acuerdo al contenedor seleccionado, cabe destacar que para hacer el menú debes valerte de un while anidado, es decir un while para ir leyendo los contenedores y, otro while para leer las url para cada contenedor.

Con todo esto ya puedes hacer un menú dinámico, lo demás depende de ti, con un poco de esfuerzo y perseverancia no debería haber problemas, ahhh lo
olvidadaba!!!, debes recorrer ambas arreglos para contruir el menú mediante html.

Ahora te dejo un fragmento del código para contruir el menú, sin embargo yo utilizo una librería javaScript para construir el arbol, yo te aconsejo que saques la idea solamente, para que te sea más fácil debes hacer con enlaces html...

Código PHP:
var TREE_NODES={
    format:{
        left:0,
        top:86,
        width:220,
        height:600,
        e_image:"../../images/fo_p.gif",
        c_image:"../../images/fc_p.gif",
        i_image:"../../images/i_p.gif",
        b_image:'../../images/b.gif',
        bgcolor:"#d4d0c8",
        back_bgcolor:"#d4d0c8",
        animation:0,
        padding:2,
        level_ident:10,
        dont_resize_back:1
    },
    sub:[
        {html:'Sistema Cabo V 1.0',
            sub:[
            <?php
            session_start
();
            
$link mysql_connect("localhost","root","160783");
            
mysql_select_db("cabo");

            
$idPerfil $_SESSION['idPerfil'];

            
$resultPadre mysql_query("select distinct m.grupo
                                     from perfiles p
                                     inner join
                                       perfiles_menus mp on p.idperfil = mp.idperfil
                                     inner join menus m on mp.idmenu = m.idmenu
                                     where p.idperfil = $idPerfil"
,$link);
              
$totalFilasPadre mysql_num_rows($resultPadre);
              
$contPadre 1;
              while(
$rowPadre mysql_fetch_array($resultPadre,MYSQL_NUM)){
                
$rowGrupo $rowPadre[0];
                echo    
"{html:'$rowPadre[0]',";
                echo    
"sub:[";
                  
$resultHijo mysql_query("select m.*
                                             from perfiles_menus pm
                                               inner join menus m on pm.idmenu = m.idmenu
                                             where pm.idperfil = $idPerfil
                                               and m.grupo = '$rowGrupo'"
,$link);
                  
$totalFilas mysql_num_rows($resultHijo);
                  
$cont 1;
                  while(
$rowHijo mysql_fetch_array($resultHijo,MYSQL_NUM)) {
                      if (
$cont $totalFilas)
                         echo    
"    {html:'$rowHijo[1]', url:'$rowHijo[2]'},";
                      else
                          echo    
"    {html:'$rowHijo[1]', url:'$rowHijo[2]'}";

                      
$cont++;
                  }

                  echo    
"]";
                  if (
$contPadre $totalFilasPadre)
                    echo    
'},';
                  else {
                    echo    
'}';
                  }

                  
$contPadre++;
                }

            echo 
']';


        echo 
'}';
    echo 
']';

echo 
'}';
?>
Espero haberte ayudado...

Hasta Luego .-
  #14 (permalink)  
Antiguo 06/06/2007, 22:09
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: Perfiles de usuario

hechale un ojo ha este post
saludos

http://my2bits.wordpress.com/2006/12...s-de-usuarios/
__________________
gerardo
  #15 (permalink)  
Antiguo 07/06/2007, 07:08
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 3 meses
Puntos: 5
Re: Perfiles de usuario

Con lo expuesto por gatorV y el enlace que te dió chalchis ya puedes tener el menú dinámico y además diferentes permisos de accesos (lectura, escritura, etc..)

Hasta Luego .-
  #16 (permalink)  
Antiguo 07/06/2007, 19:00
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Perfiles de usuario

Necesito desarrollar un sistema de Perfiles (Módulos: Noticias, Foros, etc.) y Sub-Perfiles (Acciones: Insertar, modificar, eliminar, etc.), estoy algo confundido con respecto al método de comparación bit a bit propuesto en este tópico. Como método lo encontré muy bueno y limpio, pero mi duda es si lo puedo implementar en mi caso particular, explico de que trata.

Mi problemática es la siguiente:
Son 4 niveles de accesos: SuperAdmin, Admin, Moderador y Usuario

Además voy a tener unos cuantos módulos: Administrador de Contenidos, Noticias, Foro, Administración de usuarios y Administrador de Currículo y ofertas laborales, cada módulo (perfil) va a tener distintos sub-perfiles que deben asociarse a los 4 niveles de accesos.

Aclarando un poco más:
SuperAdmin tiene acceso a todos los módulos (perfil) y en cada modulo a todos los sub-perfiles correspondiente a los módulos ej: Módulo de Currículo y ofertas Laborales (Insertar, Modificar, Eliminar, Agregar Comentarios, etc…).

Admin tiene acceso a todos los módulos pero sólo a algunos sub-perfiles de cada modulo ej: (Modificar y Eliminar).

Moderador tienes acceso a algunos módulos como ejemplo al Administrador de Currículo y ofertas laborales y a determinados sub-perfiles de éstos módulos Ej.: (Comentar los Currículos).

¿Es posible hacer esto con el método comparación bit a bit?, por lo que leí sólo me permite manejar los perfiles a un nivel, osea, como por ejemplo permisos por módulos, pero se complica más la cosa cuando dentro de los módulos (perfil) tengo sub-perfiles, como lo planteado más arriba. En otras palabras por cada módulo(perfil) tengo sub-perfiles (Insertar, Modificar, Eliminar, Agregar Comentarios, etc…)

Gracias por cualquier ayuda.
  #17 (permalink)  
Antiguo 07/06/2007, 19:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Perfiles de usuario

Puedes agregar un permiso o nivel global aparte de los permisos por modulo, la ventaja de la comparacion bit a bit es que puedes tener muchos permisos asociados o especificos por modulo.

Saludos.
  #18 (permalink)  
Antiguo 07/06/2007, 20:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Perfiles de usuario

Gracias GatorV, ¿esto implica tener en la tabla de usuarios un campo con el valor del permiso global para los accesos a los módulos y tantos campos como módulos tenga con los respectivos permisos para los sub-roles de cada modulo?

saludos.
  #19 (permalink)  
Antiguo 07/06/2007, 20:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Perfiles de usuario

Asi es, o en su caso una tabla de permisos, donde en base a X modulo tengas Y permisos.

Saludos.
  #20 (permalink)  
Antiguo 07/06/2007, 22:23
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Perfiles de usuario

Gracias GatorV, entonces me inclino por crear una tabla user_auth, la cual tenga el id del usuario y sus respectivos permisos por módulos, también se me ocurre que podría crear un solo campo de permiso el cual guarde un array serializado que contenga los permisos por modulo, donde la key sea el modulo y el value el permiso, lo voy a analizar.

Gracias y saludos.
  #21 (permalink)  
Antiguo 07/12/2007, 09:23
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta Re: Perfiles de usuario

una preguntas como quedo tu tabla de permisos??
si no es mucha molestia

saludos
__________________
gerardo
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




La zona horaria es GMT -6. Ahora son las 17:07.