Comunidad de diseño web y desarrollo en internet online

Usuario con más de un perfil de usuario php y mysql

Citar            
MensajeEscrito el 04 Dic 2012 01:47 am
Hola amigos de Cristalab!!!

Bueno, les cuento que el asunto va como dice el título. Tengo un sistema de usuarios funcionando excelente. Digamos que tengo 5 tipos de usuarios. Al ingresar verifico el id del perfil y envío a la página que le corresponde a cada usuario, que en cada caso es distinta para cada perfil. Hasta ahí todo bien. El tema es que me surgió la eventualidad de que tengo usuarios que pertenecen a más de un perfil y por lo tanto quisiera la posibilidad de que elijan con qué tipo de perfil desean iniciar sesión. En la programación bastaría con detectar todos los perfiles que tiene asignados, darle a elegir con una listita e iniciar la sesión según el perfil seleccionado. Con eso no tengo problema. El tema es más una cuestión de lógica a la hora de guardar esa info en la bd. ¿Guardo los perfiles (1,2,3,4,etc...) separados por comas en un mismo campo? ¿O creo campos para cada perfil? ¿O hago una tabla con privilegios? La verdad es que opciones pueden ser varias, pero, aunque sea una nimiedad, estoy bloqueado y no se me ocurre la forma más óptima de administrar esta información.

Se me había ocurrido guardar los id de cada perfil (para el caso cada perfil es un número del 1 al 7) separados por "," dentro del campo "id_perfil" y extraerlos con explode, sin embargo, me parece redundante hacer una consulta para conocer el perfil, y luego actualizar agregando el nuevo perfil... No sé, por eso digo que es más una cuestión de lógica que de programación.

Espero sugerencias. De antemano muchísimas gracias.

:wink:

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 04 Dic 2012 12:13 pm
Podes hacer 2 cosas, o haces otra tabla y tenes todo normalizado, o en uno de los campos guardas un JSON.

Lo correcto seria lo primero...

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 04 Dic 2012 12:27 pm
Exactamente, lo correcto es lo primero, como dice SinSemilla, pero si la cantidad de perfiles no va a ser muy grande, tal vez lo mejor es que en la tabla donde guardas los usuarios, tengas un campo tipo TEXT donde almacerarías un JSON, que sería algo así:

Código :

{[1,4,6]}

Con las funciones json_decode() y json_encode() puedes manipular ese JSON (que en PHP sería un array).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Dic 2012 01:07 pm
Siendo puristas debes crear una tabla de perfiles indexados los cuales relacionas con los usuarios en una tabla de rompimiento

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

chrome
Citar            
MensajeEscrito el 04 Dic 2012 03:14 pm
Muchas gracias por las respuestas. En efecto creo que no tendría más de 10 perfiles. Investigaré sobre el uso de JSON ya que se acerca a lo que tenía en mente. Respecto de la tabla de rompimiento sugerida por jpcw también investigaré que es porque tampoco había escuchado (leído) hablar de eso.

Mil gracias por iluminar el camino compañeros.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 04 Dic 2012 09:08 pm
En el caso de crear una tabla nueva como sugieren ¿cómo podría ser la estructura? Había pensado algo así:

|id_usuario | perfil1 | perfil2 | perfil 3 | perfil4 | perfil5 | (creo que tendré unos 7 u 8 periles)

Sin embargo, no sé si así sería lo mejor o más óptimo. ¿Qué dicen?

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 05 Dic 2012 12:08 pm
nonono.....

Tenes la tabla usuario con su respectivo id

Después tenes otra tabla perfiles con su id, nombre y otras verduras

Y la que te hace la relación entre las dos, es otra tabla usuarios_x_perfiles que tiene el id del usuario y el id de los perfiles...

Saludos!

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 05 Dic 2012 01:11 pm

eareddhel escribió:

En el caso de crear una tabla nueva como sugieren ¿cómo podría ser la estructura? Había pensado algo así:

|id_usuario | perfil1 | perfil2 | perfil 3 | perfil4 | perfil5 | (creo que tendré unos 7 u 8 periles)

Sin embargo, no sé si así sería lo mejor o más óptimo. ¿Qué dicen?

NOP

porque que pasaría si en algún caso aparece otro perfil?
-> tendrías que modificar tu tabla!!!

la forma de hacerlo bien es así:

creas una tabla de perfiles
ID_PERFIL | NOMBRE_PERFIL
1 | Admin
2 | Usuario
3 | Asesino
4 | Conductor

Creas tu tabla de usuarios
ID_USUARIO | NOMBRE_USUARIO | ETC1 | ETC2|......
1 | Paco pecas | etc | etc |.....
2 | Steve Jobs | etc | etc |.....
3 | eareddhel | etc | etc |.....


y creas una tabla que relaciona estas dos tablas "PerfilUsuarios" (esta es la tabla de rompimiento)
ID_USUARIO | ID_PERFIL
1 | 2
1 | 4
2 | 1
3 | 3
1 | 4

donde en este ejemplo tendrías que
paco pecas tiene perfil usuario y conductor
Steve jobs tiene perfil admin
eareddhel tiene perfil asesino y conductor

:meditar:

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

chrome
Citar            
MensajeEscrito el 05 Dic 2012 04:40 pm
:oops:
Muchas gracias. Tienen toda la razón. Haré los cambios necesarios.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.