2011-06-28 17 views
10

Quería algunas sugerencias de alguien con experiencia en php.Mostrando la misma página de manera diferente para usuarios con diferentes roles

estoy haciendo un sitio web en php que tendrá 4 tipos de usuarios: 1. invitado (no registrados), 2. registrada, 3. registrados con privilegios que especiales, 4. administradores

Así que la la misma página será visible de manera diferente a los cuatro de ellos.

Ahora estoy haciendo eso usando if condiciones. En cada página, estoy marcando el role del usuario y luego uso muchas declaraciones if para mostrar la página en consecuencia.

Hace que el código sea muy grande y desordenado, y tengo que comprobar las condiciones una y otra vez en todas las páginas.

  1. ¿Hay una manera mejor de hacer esto?

  2. ¿Cómo se hace esto en los sitios web profesionales?

  3. Pregunta extendida: ¿Cuál es la forma más óptima de hacer lo mismo utilizando un marco MVC como kohana 3.1? ¿Tiene algo que ver con acl?

+0

Respuesta extendida: Sí, ACL es una Lista de control de acceso. Básicamente dice "esta es una página de detalles de cuenta de usuario, por lo que se puede acceder a ella mediante las siguientes funciones: 'usuario registrado', 'administrador', 'superusuario', 'dios'". – cypher

Respuesta

5

Realmente depende de lo que necesita.

Por ejemplo, si la página tiene gran parte de que el cambio por completo, lo que sugeriría es crear diferentes plantillas e incluirlos en función de sus "permisos"

$permission = $_SESSION['type_user']; 
include '/path/to/file/with/permission/'.$permission.'/tpl.html'; 

y tener algo en la página similar a

<?php 
//inside include.php you have the line similar to 
//$permission = isset($_SESSION['type_user']) && $_SESSION['type_user']!=''?$_SESSION['type_user']:'common'; 
require_once '/mast/config/include.php'; 
include '/path/to/file/with/permission/common/header.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_1.html'; 
include '/path/to/file/with/permission/common/tpl_2.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_3.html'; 
include '/path/to/file/with/permission/common/footer.html'; 
?> 

si el guión está lleno de pequeñas piezas como "mostrar este texto", o "mostrar este botón", puede crear una función que compruebe los permisos para usted

<?php 
function can_user($action, $what){ 
    switch($action){ 
     case 'write': 
      return $your_current_if_on_what; 
      break; 
     case 'read': 
     default: 
      return $your_current_if_on_what; 
      break; 
    } 
} 
?> 

and the template will look like: 

[my html] 
<?=can_user('read','button')?'My Button':''?> 
[my html] 

Como regla general, si un fragmento de código se utiliza más de 2 veces, debe colocarse en una función/archivo por separado, por lo que si tiene muchos "IFS" necesita crear una función

+1

Gracias. Aunque me tomó un tiempo entender, lo tengo. ¿Alguna idea de cómo lo hacen los grandes sitios web profesionales? –

+0

Depende de lo que quiera decir con grandes sitios profesionales. Corro y desarrollo para grandes sitios, y cada vez es una solución diferente dependiendo de cuáles sean los parámetros. Por ejemplo, debe tener en cuenta que cada vez que PHP tiene que acceder al sistema de archivos tiene un gran problema de rendimiento, pero algunos aceleradores/optimizadores a menudo pueden ayudar (yo uso eAccelerator). – Fabrizio

+0

Mis dos últimos sitios grandes Usé una combinación de los dos donde la plantilla que quería incluir se pasó al "usuario_cadena" y el nombre de la plantilla volvió a aparecer o un nombre de plantilla diferente cuando el usuario no tenía el permiso para ver esa parte algo como 'include can_user ('read', 'button', 'button_html');' y la función can_user será 'return $ this_user_can?$ template, 'permission_deny_in_page'; ' – Fabrizio

Cuestiones relacionadas