2008-08-19 14 views
8

He intentado hacer esto varias veces sin suerte. Después de leer this post, me interesó hacer esto de nuevo. Entonces, ¿alguien puede decirme por qué lo siguiente no funciona?Implementando permisos en PHP

<?php 

$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if($user == ($editor | $admin)) { 
    echo "Test";  
} 

?> 

Respuesta

11

Use el operador binario OR (|) para activar bits, utilice el operador AND (&) para verificar los bits. El código debería tener este aspecto:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if($user & ($editor | $admin)) { 
     echo "Test";  
    } 

?> 

Si no entienden binario y exactamente lo que los operadores de bits hacen, usted debe ir a aprender la misma. Comprenderá cómo hacer esto mucho mejor.

2

Ha sido un largo tiempo desde que utiliza PHP, pero voy a suponer que esto funcionará:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if(($user == $editor) || ($user == $admin)) { 
     echo "Test";  
    } 

?> 
1

(2 | 4) está evaluando a 6, pero 2 == 6 es falso.

1

@mk: (2 | 4) evalúa a 6.

1
$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if (user == $editor || $user == $admin) { 
    echo "Test"; 
} 
1

impresionante, esto parece la mejor manera de hacerlo permisos en un CMS. ¿Sí? ¿No?

Tal vez, nunca lo he hecho de esa manera. Lo que he hecho es utilizar operadores bit a bit para almacenar una gran cantidad de configuraciones "sí o no" en un solo número en una sola columna en la base de datos.

Supongo que para permisos, de esta manera funcionaría bien si desea almacenar permisos en la base de datos. Si alguien quiere publicar algún contenido, y sólo quiere que los administradores y editores que ven, sólo hay que almacenar el resultado de

($editor | $admin) 

en la base de datos, a continuación, para comprobarlo, hacer algo como

if ($user & $database_row['permissions']) { 
     // display content 
} else { 
     // display permissions error 
} 
0

En mi opinión, esto no se escala bien. Realmente no he intentado usarlo en un proyecto a gran escala, pero un CMS parece complicado de usar.

6

Con el interés de no reinventar la rueda, ¿por qué no echar un vistazo a los sistemas de ACL/Autenticación como Zend ACL y Zend Auth? Ambos pueden usarse independientemente del Zend Framework como un todo. El control de acceso es una situación complicada, por lo que uno se beneficia al menos de ver cómo lo hacen otros sistemas.

0

Siempre depende de lo que necesita. Si ya conoces el Zend Framework, entonces repetiría la sugerencia Zend_Acl/_Auth que se hizo antes. Pero tenga en cuenta que cada marco tiene un componente similar.

Lo otro que viene a la mente es LiveUser. También me gusta trabajar mucho con él.

Creo que puedes hacer casi cualquier cosa y aunque tu enfoque parece muy simple, también es limitado ya que (a través de todos esos() 's) vas a poner mucha lógica de ACL justo en medio de su aplicación. Lo cual no es lo mejor que se puede hacer para mantenerlo simple y extensible. ;)

2

Lo he usado en informes de errores y funciona bastante bien.En cuanto a los permisos de los usuarios, debería funcionar muy bien: podría tener varias columnas para cada permiso de usuario en su base de datos o una columna de nivel de usuario en su base de datos. Ir por esta opción