Ver Mensaje Individual
  #6  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Todo ayuda Delphius. ¿Sabes qué pasa? Que al cabo he "conseguido" (todavía lo pongo en duda) un sistema de privilegios, de "roles", muy, pero, que, muy sencillo... vamos, a mí me lo parece, y, desde luego, comparándolo con el de WordPress (que es un sistema similar al que traigo entre manos, si bien el mío es mucho más humilde), digo, en WordPress es un asunto bastante complejo, o a mí me lo parece.

Sin embargo, voy a mostrar la "burrada" que he preparado para asignar diferentes permisos a diferentes usuarios. A continuación el método "InitializeUserRoles()" de una clase "Roles":

Código PHP:
  private function InitializeUserRoles(){
    
// 10 = Admin user
    
$this->userRoles[10][ROLES_CAP_MANAGE_SITE] = true;
    
$this->userRoles[10][ROLES_CAP_MANAGE_LINKS] = true;    
    
$this->userRoles[10][ROLES_CAP_MANAGE_TERMS] = true;  
    
$this->userRoles[10][ROLES_CAP_MANAGE_POSTS] = true;   
    
$this->userRoles[10][ROLES_CAP_MANAGE_USERS] = true;    
    
$this->userRoles[10][ROLES_CAP_MANAGE_THEMES] = true;
    
$this->userRoles[10][ROLES_CAP_MANAGE_IMPORT] = true;    
    
$this->userRoles[10][ROLES_CAP_MANAGE_EXPORT] = true;    
    
$this->userRoles[10][ROLES_CAP_MANAGE_OPTIONS] = true;
    
$this->userRoles[10][ROLES_CAP_MANAGE_PROFILE] = true;      
    
$this->userRoles[10][ROLES_CAP_MANAGE_COMMENTS] = true;
    
// 9 = Editor user
    
$this->userRoles[9][ROLES_CAP_MANAGE_SITE] = true;
    
$this->userRoles[9][ROLES_CAP_MANAGE_LINKS] = true;    
    
$this->userRoles[9][ROLES_CAP_MANAGE_TERMS] = true
    
$this->userRoles[9][ROLES_CAP_MANAGE_POSTS] = true;     
    
$this->userRoles[9][ROLES_CAP_MANAGE_PROFILE] = true;          
    
$this->userRoles[9][ROLES_CAP_MANAGE_COMMENTS] = true;
    
// 8 = Author user
    
$this->userRoles[8][ROLES_CAP_MANAGE_SITE] = true;    
    
$this->userRoles[8][ROLES_CAP_MANAGE_POSTS] = true;  
    
$this->userRoles[8][ROLES_CAP_MANAGE_PROFILE] = true;    
    return 
true;
  } 
Eso, que estoy seguro de que puede mejorarse (pero, ahora no estamos viendo eso), se resume en "El usuario con nivel 10 puede administrar el sitio", "El usuario con nivel 10 puede administrar enlaces", etc., etc. Luego, como puede verse, según bajamos el nivel del usuario este puede hacer menos cosas. Eso sería una especie de "tabla de capacidadades según el nivel de cada usuario".

Hay que decir que la clase "Roles" sirve a una propiedad de la clase "User". La clase "User" cuenta con una propiedad (variable, miembro) del tipo "Roles". Cuando se instancia la clase "User" se asigna a la variable "userlevel" (del tipo "Roles") un determinado nivel y, la propia clase "User" cuenta con un método "Can()" que lo que hace es llamar a este otro de la clase "Roles":

Código PHP:
  public function UserCan($capability){    
    if(isset(
$this->userRoles[$this->userLevel][$capability])){
      return 
$this->userRoles[$this->userLevel][$capability];  
    }else{
      return 
false
    }
  } 
Que, como puede verse, viene a comprobar si el usuario del nivel que sea, puede realizar una determinada tarea, tiene la capacidad de realizarla. Básicamente en eso se resume todo... (!). En la base de datos hay una tabla "users" y otra tabla "usersmeta", que están relacionadas. A cada usuario le corresponde un nivel, que se guarda en "usersmeta". Y eso es todo... No hay más... ¡y parece funcionar!

Pero,... francamente, no entiendo entonces a qué tanto "lío" en WordPress con los permisos... y, como sé perfectamente que WordPress es mucho WordPress, y que mi sistema no le llega a la altura de los zapatos... no tengo sino pensar que en algo estoy metiendo la pata, que lo que he hecho no está bien hecho, porque, ¡no puede haberme resultado tan sencillo, ni, en general, resultar tan sencillo como parece y es!

Pero, para terminar, aquí aplica aquello de "Eppurse muove"... porque, con todas las dudas que hay todavía por ahí rondando, el caso es que parece que el puñetero sistema funciona...

En todo caso, y, en lo que respecta a esto último, tal vez debería hacer lo que ha recomendado ArdiIIa, esto es, mirar algún otro programa similar y estudiar su funcionamiento. Y a lo mejor para lo que planteo desde un principio tampoco estaría mal que hiciera esto, pero, bueno, qué leches, quería comentar aquí el asunto a ver qué os parecía a vosotros.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 16-11-2007 a las 21:16:38.
Responder Con Cita