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 .-