Ver Mensaje Individual
  #200 (permalink)  
Antiguo 28/04/2005, 18:43
Avatar de Neuron_376
Neuron_376
 
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 7 meses
Puntos: 2
Hola Cluster

Me parece muy buen script, sin embargo unas notas:

1. $_SERVER['HTTP_REFERER'] ... es una variable que tiende a fallar segun la configuracion del cliente, entonces no es seguro usarla para validar, sin embargo si este sistema se aplica para el area de Administracion de un sitio, entonces esta bien, porque tu te aseguraras que las computadoras desde las cuales estas entrando, esten confugiradas correctamente para no caer en el error del REFERED

2. La base de datos me parece que puede mejorarse:

CREATE TABLE usuarios (
ID smallint(6) unsigned NOT NULL auto_increment,
usuario varchar(16) NOT NULL,
pass varchar(16) NOT NULL,
nivel_acceso smallint(4) unsigned NOT NULL default '0',
PRIMARY KEY (ID),
UNIQUE KEY ID (ID)
) TYPE=MyISAM PACK_KEYS=1;

Yo uso varchar porque, si un usuario tiene como nombre solamente 5 caracteres, entonces solo 5 caracteres ocupara, ademas es mas facil un index sobre este campo.

3. El control de niveles esta bien, pero con ese control pones solamente para ZONAS, pero dentro de una zona existen muchos permisos que unos y otros usuarios no tienes... ejemplo basico:

Niveles:

1 = Atencion a Clientes
2 = Administracio del sitio

Subniveles:

Dentro de Atencion a Clientes existen diversas actividades que no todo el personal puede tener acceso, como:

1. Contestar e-mails con preguntas
2. Editar cuentas
3. Procesar pagos.

Dentro de Administracion del sitio

4. Editar Template de Noticias
5. Borrar Noticias
6. Resetear el servidor

Entonces para estos casos las bases de datos son un poco mas complejas, pero respetando tu diseño actual, podria facilmente ser algo asi:

CREATE TABLE usuarios (
ID smallint(6) unsigned NOT NULL auto_increment,
usuario varchar(16) NOT NULL,
pass varchar(16) NOT NULL,
nivel_accesos varchar(16)NOT NULL,
subnivel_accesos varchar(16) NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY ID (ID)
) TYPE=MyISAM PACK_KEYS=1

- Un usuario que puede entrar a la zona 1 y a todas las subzonas seria:
nivel_accesos = "1"
subnivel_accesos = "1,2,3"

- Un usuario que puede entrar a la zona 1 y a zona 2 completamente, pero en cliente solo puede procesar pagos seria:
nivel_accesos = "1,2"
subnivel_accesos = "3,4,5,6"

Es decir, el campo nivel acceso te da entrada a una zona, y el subnivel te dice de esa zona a cuales puede entrar.

Respetando tu diseño de todo en una tabla esa seria la forma, en PHP lees los permisos y haces un split de las opciones y listo, tienes los permisos del usuario, estos permisos los pones en session, y en cada pagina revisas que el usuario tiene el acceso correcto para esa pagina en especial.

Bueno, el sistema que te digo es muy parecido al que estoy utilizando yo ahortia y me ofrece mucha flexibilidad, sin embargo es un poco mas complejo debido a otros parametros que debo respetar.

Espero que te sirvan mis comentarios, y repito muy buen script, pero creo que pudes mejorarlo en esos puntos.

Suerte!!