Ver Mensaje Individual
  #13 (permalink)  
Antiguo 06/06/2007, 21:39
lucasarts_18
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 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 .-