Foros del Web » Programando para Internet » PHP »

grupos de usuarios

Estas en el tema de grupos de usuarios en el foro de PHP en Foros del Web. hola amigos, que tal. Tengo una super duda: estoy haciendo un sistema en php y mysql, que cree usuarios y grupos; donde los usuarios tendran ...
  #1 (permalink)  
Antiguo 13/06/2011, 16:23
 
Fecha de Ingreso: mayo-2011
Ubicación: veracruz
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta grupos de usuarios

hola amigos, que tal.

Tengo una super duda:
estoy haciendo un sistema en php y mysql, que cree usuarios y grupos; donde los usuarios tendran que elegir el grupo que les corresponde. ya creo usuarios y grupos, pero no se como asignarles los grupos a los usuarios. por favor pongan un ejemplo de como hacer esto, se los agradeceria demaciado.

tengo tablas(usuarios y grupos) y sistema de autentificacion.

gracias.
  #2 (permalink)  
Antiguo 13/06/2011, 16:39
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: grupos de usuarios

un usuario puede estar en más de un grupo? o solo puede elegir uno?
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 13/06/2011, 16:50
 
Fecha de Ingreso: mayo-2011
Ubicación: veracruz
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: grupos de usuarios

si, un usuario tiene que estar en un grupo. Un grupo puede tener varios usuarios, y los usuarios pueden cambiarse a otros grupos.
  #4 (permalink)  
Antiguo 13/06/2011, 16:58
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: grupos de usuarios

ah ok, entonces lo que debes hacer es un campo en la tabla usuario que tenga la id del grupo, por ejemplo:

tabla usuarios
id nombre grupo
1 Hermione 1
2 Ron 1
3 Draco 2

tabla grupos
id nombre
1 Gryffindor
2 Slytherin
3 Hufflepuff
1 Ravenclaw

that is the way!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #5 (permalink)  
Antiguo 13/06/2011, 17:27
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: grupos de usuarios

Esto te puede resultar de interés.
Gestión de usuarios bit a bit
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 14/06/2011, 09:29
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

Hola estuve viendo el mensaje que aconsejo Uncontroled_Duck sobre grupo de usuarios bit a bit pero me queda una duda, como controla el acceso, en el ejemplo puesto que tiene el usuario tiene nivel 9

Código PHP:
$access 9
pero entonces como en este chequeo el script sabe que nueve se dividira solamente entre 1 y 8

Código PHP:
if(getAccess($accessACCESS_VIEW))    
     echo 
'Tiene permisos de ver <br />';
else    
     echo 
'No tiene permisos de ver <br />'
el valor quwe le esta pasando a la funcion getAccesses es 9. y el valor de ACESS_VIEW es de 1,

la funcion de getAccess

Código PHP:
function getAccess($bit1$bit2){    
     return (((int)
$bit1 & (int)$bit2) == 0) ? false true;

Me queda la duda como chequea que un usuario con valor 14 solo tendra permisos a los accesos concebidos en las constantes.
  #7 (permalink)  
Antiguo 14/06/2011, 09:39
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: grupos de usuarios

En ese ejemplo y si las constantes están declaradas daría permiso a:
ACCESS_VIEW,1
y
ACCESS_CREATE,8

8+1=9, el resto de constantes no tendrían acceso a esa parte.

Haz las pruebas sumando los distintos valores entre si. En el caso del ejemplo el acceso a todo lo tendrías con la suma de las constantes declaradas, que sumarían 31.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 14/06/2011, 10:23
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

Si esa parte la entendi, lo que no entendi es como chequea.

ejemplo tengo un usuario que tiene acceso a ver y agregar

tendria permisos 1 y 2 sumados serian 3.

pero tendre mas usuarios que tendria ejemplo nivel 9 crear y ver.

y tendria otros que serian nivel 14 agregar, editar y crear.

Hasta aqui todo perfecto.

Mi duda es a la hora de chequear el nivel del usuario.

en la pagina de editar tendria que tener un chequeo a ver si el usuario tiene nivel 4 entre sus valores ??

Código PHP:
if ($access==4)
  echo 
"permiso para editar.";
else
   echo 
"No permiso para editar."
Pero el usuario 14 tambien tiene permiso para ediciones.

Código PHP:
// para el usuario con nivel 4
if ($access==4)
  echo 
"permiso para editar.";
else
   echo 
"No permiso para editar.";

// Para el usuario con nivel 14
if ($access==14)
  echo 
"permiso para editar.";
else
  echo 
"no permiso para editar.";

// Para usarios con valor 12
if ($access==12)
  echo 
"permiso para editar.";
else
  echo 
"no permiso para editar."
y asi respetivamente en todos las sumas que como resultado contengan en su adicion el valor 4 ???

es la duda que me queda.
  #9 (permalink)  
Antiguo 14/06/2011, 10:35
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: grupos de usuarios

respondiendo a la otra pregunta, si es 14 tendría permisos 8, 4 y 2

8+4+2=14

eso se usa mucho no solo para permisos, también para marcar errores, por ejemplo un error 14 significa que hubieron 3 errores (8, 4 y 2), tambien se usa para identificar posiciones y para identificar distintos estados (por ejemplo un animal con numero 14 tendría 3 estados (8, 4 y 2) XD

para calcularlos solo vas restando cada numero mayor

por ejemplo si es 29

primero restas 16 por que no puedes restar 32

te queda 13, ahora restas 8 que te daría 5.

restas 4 y te quedará 1

a 1 no le puedes restar 2 así que solo te queda restarle 1

los numeros son 16, 8 ,4 y 1

16+8+4+1 = 29
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #10 (permalink)  
Antiguo 14/06/2011, 11:21
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

O sea, que en tu pagina de editar para continuar con el mismo ejemplo comenzaria tu script por buscar el nivel de acceso del usuario.

Un query a tu base de datos y chequeas el valor de la suma total.

resultado: 18.

entonces seguiras en el script de tu pagina por verificar que valor te dio el nivel de acceso?? rectificame si estoy equivocado en mis pasos.

Código PHP:
// Resultado del query. Suponiendo que sea 18
$access=$result['access']; 
Aqui es donde tengo la duda. Como chequeo este valor. Como se cuales son los valores que debo restarle (el numero mayor mas cercano)???

Código PHP:
if ($access <= 3)
  echo 
"No tiene permiso de editar";

if (
$access <= && $access >= 4){
   echo 
"Si tiene permiso";

if (
$access == 8)
  echo 
"No tiene permiso para editar.";

if (
$access <= 15 && $access >= ){
   
$access -= 8;
   if (
$access >=4){
       
$access -= 4;
       echo 
"Tiene permiso de editar";
   }
   else {
      echo 
"No tiene permiso de editar.";
   }
}

// Aqui entraria el valor 18.
if ($access <= 31 && $access >= 16){
    
$access -= 16// quedaria valor 2.
    
if ($access >= 8){ // no aplica
        
$access -= 8;
    }
    if (
$access >= 4){ // no aplica
        
$access -= 4;
        echo 
"Si tiene permiso para editar.";
    }
    if (
$access <= 3){ // Seria este el resultado.
       
echo "no tiene permiso para editar.";
    }


Asi estaria bien hecho o existe otra forma menos complicada ????

Creo que es mucho trabajo para chequear de esta forma.

Que tal si identificas a cada usuario con una letra.

Ejemplo:

View - a
ADD - b
EDIT - c
CREATE - d
ADMIN - e

Base de Datos

user_id | nivel_acceso
-----------------------------
1 | abc
2 | e
3 | bd


y en tu pagina Edit.php para los usuarios que tengan permiso de editar. ("c").

Código PHP:
//query a la DB al user_id 3, result bd
$access $result['nivel_acceso'];

// Chaquear que tenga acces a editar valor "C"
if(!strstr($access"c"))
   echo 
"Acceso Denegado, Tu Usuario no tiene permiso para editar."// Para el Usuario 3.
else
   echo 
"Usuario con permiso para editar."

No quedaria mas corto y mas simple de chequear de esta forma que de la otra ???

Solo trato de encontrar la forma mas comoda y eficiente.

Última edición por goransh_pc; 14/06/2011 a las 11:50
  #11 (permalink)  
Antiguo 14/06/2011, 11:57
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: grupos de usuarios

Cita:
Iniciado por goransh_pc Ver Mensaje
...Aqui es donde tengo la duda. Como chequeo este valor. Como se cuales son los valores que debo restarle (el numero mayor mas cercano)??...
Por que los bits van en serie, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024.... tantos como necesites hacer para conseguir lo que quieres.

Multiplica o divide por 2.

Al descomponer el numero, lo que no este dentro de esos valores lo descartará.

Sobre la otra forma, pierde la esencia de utilizar este sistema.

Digamos que no hay si es mayor o menor, si lo tienes entras y si no, no entras.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #12 (permalink)  
Antiguo 14/06/2011, 12:07
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

y que tal la segunda opcion con letras ???
  #13 (permalink)  
Antiguo 14/06/2011, 12:18
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: grupos de usuarios

bueno no es la mejor forma, te conviene usar la lógica ue te expuse mas arriba pero... PHP tiene funciones para hacer eso automáticamente, solo que no recuerdo como se llaman...
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #14 (permalink)  
Antiguo 14/06/2011, 13:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: grupos de usuarios

Para que veas como funciona, debes leer las definiciones que coloqué al principio. La segunda es la más importante y te explica la duda de como verifica.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 14/06/2011, 14:04
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

Lo siento amigos pero continuo sin entender como es el chequeo, podrian poner un ejemplo practico si tienen tiempo de como chequear el valor ??

A mi, en mi caso se me hizo mas comodo analizarlo de la forma con letras, como puse en mi ejemplo anterior solos chequeaba que en la cadena de caracteres de permisos se encontrara la letra que le daba el permiso.

if (strstr($access, "a") // tiene permiso.

En este caso es lo mismo pero con suma de numeros, queda claro la notacion numerica utilizada.

if ($access == 18) // tiene permiso de nivel 16 y de nivel 2.

Pero mi duda es, por ejemplo: el usuario que tiene nivel 18 yo se que la suma se compone por 16 + 2, eso lo tengo bien claro, lo que no entiendo es como realizan el chequeo el if para permitir o no porque el valor de access puede ser 18 que 12 o 14 o el que sea.

Si pueden ponerme un ejemplo practico para ver como lo hacen o referirme a alguna pagina que lo tenga se los agradeceria.

PD: abimaelrc no se sobre que me hablas de las definiciones que colocastes arriba, no las veo.

Muchas Gracias.
  #16 (permalink)  
Antiguo 14/06/2011, 14:21
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: grupos de usuarios

mira, te explico en que lo uso yo aquí en la empresa.

cuando se ingresan valores en el sistema valido que los datos sean correctos, por ejemplo así:

Código PHP:
Ver original
  1. $errors=0;
  2. $var='name'; if(strlen($_POST[$var])>1) $a=$_POST[$var]; else $errors+=1;
  3. $var='pass'; if(strlen($_POST[$var])>5) $a=$_POST[$var]; else $errors+=2;
  4. $var='ageo'; if(is_numeric($_POST[$var])) $a=$_POST[$var]; else $errors+=4;
  5. $var='area'; if(is_numeric($_POST[$var])) $a=$_POST[$var]; else $errors+=8;
  6. $var='code'; if(is_numeric($_POST[$var])) $a=$_POST[$var]; else $errors+=16;
  7. $var='phon'; if(is_numeric($_POST[$var])) $a=$_POST[$var]; else $errors+=32;

como verás cada vez que se comete un error se aumenta el numero de errores, supongamos que ingreso la contraseña muy corta, entonces la variable $errors se aumenta en 2 y que en el código (code) el usuario ingresa una letra siendo que solo se admiten numeros, entonces se aumenta a 16 (16+2=18)

entonces hago que el sistema muestre ese numero de error:

ERROR #18

de esta forma el usuario no sabe que significa ese error, pero me notifica el numero a mi y puedo saber que problema hay con algo así:

Código PHP:
Ver original
  1. echo $errors & 1 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 1 (nombre muy corto)<br>";
  2. echo $errors & 2 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 2 (password muy corto)<br>";
  3. echo $errors & 4 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 4 (edad no es numerica)<br>";
  4. echo $errors & 8 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 8 (area no es numerica)<br>";
  5. echo $errors & 16 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 16 (codigo no es numerico)<br>";
  6. echo $errors & 32 ? 'SE ' : 'NO SE '," HA COMETIDO EL ERROR 32 (telefono no es numerico)<br>";

lo que me mostrará en pantalla lo siguiente:

NO SE HA COMETIDO EL ERROR 1 (nombre muy corto)
SE HA COMETIDO EL ERROR 2 (password muy corto)
NO SE HA COMETIDO EL ERROR 4 (edad no es numerica)
NO SE HA COMETIDO EL ERROR 8 (area no es numerica)
SE HA COMETIDO EL ERROR 16 (codigo no es numerico)
NO HA COMETIDO EL ERROR 32 (telefono no es numerico)

entonces puedo decirle al usuario que debe poner una contraseña mas larga y poner un código con números

claro que se puede hacer mas rapidamente solo calculando mentalmente como te dije antes

18-16-2=0
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #17 (permalink)  
Antiguo 14/06/2011, 14:21
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: grupos de usuarios

Sobre como funcionan los operadores, aquí puedes encontrar su significado y ejemplos.

Operadores bit a bit

Operador ternario

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #18 (permalink)  
Antiguo 14/06/2011, 15:02
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: grupos de usuarios

Pues muchisimas gracias, ya comprendo como es el chequeo del valor a traves de "&", esto es lo que no me quedaba claro, como chequeabas que el valor contenia esos bits y lo hace bit a bit con el operador &, ya comprendo, por eso veia mucho mas simple identificarlo con una letra, y buscar si se encontraba en la cadena.

Pues muchas gracias una vez mas por todas las dudas aclaradas.

Etiquetas: grupos, mysql, sistema
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 20:01.