Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 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
  #2  
Antiguo 16-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Bueno Dec, para empezar se que eres nuevo en este foro con apenas 8 mil y pico de post se te puede perdonar el que pongas estos ejemplos que me parece que son de PHP en el foro de varios, pero como dije, se que eres nuevo y solo te puedo remitir a que leas la GDE del club.
Aparte de la broma:
Me parece que tendrías un problema con lo que plateas (seguro ya lo as pensado).
Que pasa si en un momento determinado decides que el usuario con permisos 9 no puede accedes a X seccion?
Tendrias que ir al programa y modificarlo por codigo, para mi lo ideal seria que esto se guardara en la tabla, (me refiero a los accesos de cada nivel), de esa manera llamaria a:
Usuario.
Nivel.
Acceso permitido.
Osea en vez de dos parametros tres.
Se que te complico la vida, pero tambien aprendemos.
Disculpa la broma, no me pude contener.
Saludos
Responder Con Cita
  #3  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si os aburrís podéis echar un vistazo, y, si encontráis algo que "hieda y no huela", os estaré agradecido si me lo comentáis, leches, ¡que para algo aparecéis en los créditos!

http://82.158.255.47/gbprealpha/

Y vamos a lo que vamos:

Usuario autor:

Login: clubdelphi1
Password: clubdelphi1

-------

Usuario editor:

Login: clubdelphi2
Password: clubdelphi2

-------

Usuario administrador:

Login: clubdelphi3
Password: clubdelphi3

Ya me diréis...

PD: NO TEMÁIS ROMPER NADA... NO HAY PELIGRO ALGUNO, COMO MUCHO, HABRÍA QUE RESTAURAR LA BASE DE DATOS, NADA MÁS, Y ESTO LO HAGO 200 VECES AL DÍA, INSISTO, NO HAY PROBLEMA, NO TEMÁIS ROMPER NADA EN ABSOLUTO, DARLE LA CAÑA QUE QUERÁIS AL BICHO.

PD2. Ya puestos a "saltarme" la guía de estilo, me he puesto a gritar.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 16-11-2007 a las 21:39:01.
Responder Con Cita
  #4  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Caral, de hecho podría ser... guardar los "permisos" en la base de datos... creo que WordPress hace algo muy parecido a eso, cuando no eso mismo. Tal vez podría mirarse, porque, efectivamente, resultara interesante que un "editor", en un momento dado, también pudiera administrar usuarios, sin que asumiera el rol de "administrador" sí o sí.

¡Ay! Ya sabía yo que esto no podía ser tan sencillo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 16-11-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Ya me diréis...

PD: NO TEMÁIS ROMPER NADA... NO HAY PELIGRO ALGUNO, COMO MUCHO, HABRÍA QUE RESTAURAR LA BASE DE DATOS, NADA MÁS, Y ESTO LO HAGO 200 VECES AL DÍA, INSISTO, NO HAY PROBLEMA, NO TEMÁIS ROMPER NADA EN ABSOLUTO, DARLE LA CAÑA QUE QUERÁIS AL BICHO.
Me da un error

Cita:
509 Bandwidth Limit Exceeded
The server is temporarily unable to service your request due to the site owner reaching his/her bandwidth limit. Please try again later.


Me gusta.... Un excelente trabajo en sus comienzos. Ya puse mi primer artículo..
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #6  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No creáis a ArdiIIa, ¡no le da ese error! Otro tal vez, ¡pero ese no!

PD. Gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 16-11-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Si ves que te funciona, por el momento puedes dejarlo así...
Entiendo lo que planteas, y si del modo en que lo indicas tal parece que no resulta ser demasiado complejo.
En todo caso, yo si lo he complicado

A tu modo, el modelo funciona bien. Y no veo que el método Can este mal. A una primera visión parece que se ajusta a lo que deseas.
No se si estás acostumbrado a UML, sino lo estás tal vez tener un pequeño panorama visual te haga ver algo que te está incomodando.

No conozco WordPress, y no creo que con mis escasos conocimientos en el área pueda entenderlo si le hecho una ojeada. Por ese lado no te sabría decir...

Te soy sincero, tengo que sentarme tranquilo a analizar bien en detalle esto de los permisos y roles. Si me das un tiempo puede que con un mejor análisis del problema encuentre otro razonamiento... pero para esto necesitaría conocer con mayores detalles tus clases, el problema, el dominio... y pues... esto puede que no venga al caso y no sea posible.

No te rompas demasiado la cabeza, si a tu parecer esto no amerita demasiada complejidad la simpleza de tu código es útil.


Se que no aporté demasiado... como te dije: tendría que estar en tu situación y analizar con mayores detalles para saber si el código generado necesita limpieza o no.

Si crees que te podamos ser de ayuda, y si lo ves oportuno y conveniente que tengamos acceso a una descripción más global del problema que te molesta pues aqui me tienes a mi. Aunque como sabes... yo de PHP apenas lo conozco pero en lo que es un análisis y diseño puede que te sea de ayuda.

Exitos...
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No te preocupes en absoluto Delphius. De veras, tampoco es mi intención que nadie se coma la cabeza por algo, que, en todo caso, me toca a mí.

En serio. No era mi intención. Lo que cada uno pueda aportar bien aportado está y se agradece, pero, no es menester volverse loco por contestar a este loco.

Por otro lado, y, si todo va como espero (¡pero nunca nada va como espero!) pronto podrás echar un vistazo al código fuente del invento.

Así que ya sabes Delphius, no te preocupes más de la cuenta.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 16-11-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Hola,

No te preocupes en absoluto Delphius. De veras, tampoco es mi intención que nadie se coma la cabeza por algo, que, en todo caso, me toca a mí.

En serio. No era mi intención. Lo que cada uno pueda aportar bien aportado está y se agradece, pero, no es menester volverse loco por contestar a este loco.

Por otro lado, y, si todo va como espero (¡pero nunca nada va como espero!) pronto podrás echar un vistazo al código fuente del invento.

Así que ya sabes Delphius, no te preocupes más de la cuenta.
Entre locos nos entedemos
No me preocupo, pero considero que este no sólo es útil para ti, sino también para mi... porque en parte es algo que también estoy analizando desde hace tiempo y puede que ayudandote a ti, en lo que mis pocas neuronas puedan, logre comprender que es lo que falla en mi contexto.

Cita:
Empezado por dec Ver Mensaje
Tal vez podría mirarse, porque, efectivamente, resultara interesante que un "editor", en un momento dado, también pudiera administrar usuarios, sin que asumiera el rol de "administrador" sí o sí.

¡Ay! Ya sabía yo que esto no podía ser tan sencillo...
Pues a eso mismo me refería con el uso de las reglas.
Considero que esto necesita de una pespectiva. Mirar al problema desde el dominio del negocio.
Velo así: ¿El contexto del problema indica, o da indicios, que los perfiles sean modificados a lo largo del tiempo?
¿En el contexto del problema, tiene significado que un editor administre a un usuario?

En un ambiente en donde las cosas fluctúan demasiado, y deben ser controladas se necesita de una mirada un tanto distinta: ser flexible. Por lo general... para dar cierta flexibilidad a un enfoque rígido (Por ejemplo: un usuario es administrador y siempre lo será, y hará X,Y,Z) es necesario implementar reglas de negocio que alteren o adapten a estos potenciales requisitos.

¿Como se soluciona esto?
Dezplando la responsabilidad de asignación de los permisos (combinación de funcionalidad y perfil. Véase la matriz) a una clase llamemosle Negocio. Un Negocio implementa ciertas políticas que por lo general, son cambiantes. A estas políticas las podemos formular en forma de reglas.

En forma práctica, la clase Negocio tiene como responsabilidad:
Crear Reglas
Editar Reglas
Eliminar Reglas

La clase regla lo que hace es tener registrado de alguna forma que se está permitido o no. Aquí, haría falta un análisis de como y que se necesita guardar para responder a frases como esta:

Regla de Negocio 1: Todo editor tiene la posibidad de dar de baja un texto.

¿Cómo registrar esto? Por esto digo, hace falta un análisis. Su problema es como traducir una frase gramatical a un conjunto ordenado de datos. En ocasiones basta con tener un campo que represente al sujeto (en este caso el editor), un campo que indica la condición (llamemosle permitido), un campo que reprenta al verbo o acción (baja) y un campo que represente al elemento (texto) . Algo así:

Código:
Tabla Reglas:
IDRegla - Sujeto - Permitido - Accion - Elemento
1       - Editor - NO        - Baja   - texto
Este modelo lo que hace es extender al simple modelo de las matriz. La matriz es un modelo rígido, y cuando se necesita alterar algo en lo particular este enfoque no sirve. La solución es implementar esta clase Regla que se comunica con las clases funciones y la clase perfiles para darle a conocer que le son permitidos o no.

¿Se entiende la idea?

Por esto te digo, que si no estás acostumbrado a UML, puede que esta sea la oportunidad...

Haste preguntas al nivel general y determina que posibles conjuntos de reglas son válidas en el contexto para determinar como enfocar al problema del mejor modo.

Disculpa por si no soy demasiado práctico... no tengo un ejemplo con el cual mostrarte. Todo lo tengo en la cabeza.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias otra vez Delphius. Hombre, yo reconozco que ahora mismo me pierdo en lo que dices, pero, le encuentro sentido, una cosa no quita la otra. Me pregunto si realmente, como dices, en el sistema es "común" alterar los permisos de los usuarios, y yo diría que, en este caso, no lo es.

Lo que el sistema contempla es que los usuarios puedan cambiar de "rol". Un usuario puede ser "autor" y, si un usuario "administrador" lo decide, puede pasar a ser "editor", o incluso "administrador". Pero, digamos que las "capacidades" de los usuarios están bastante definidas, a no ser que se contemplen excepciones.

Es decir, un usuario "autor", en principio, no puede manejar usuarios. Así que, a no ser que se contemple la excepción de que un usuario "autor" pueda manejar usuarios... Pero, francamente, creo que en este caso eso no sería necesario. Claro está que podría ser interesante.

O sea, que lo mismo estoy hablando desde un punto de vista "cansado" y que evita complicarse más en el asunto, porque, quién me dice a mí que no sería una buena cosa que un determinado usuario "autor" (no todos) pudiera hacer cosas de un usuario "administrador", por el motivo que sea.

Suena hasta bien. Suena como lo más "elegante", como lo más "logrado". Mientras que lo otro, o sea, los permisos "rígidos", suenan a la solución más sencilla, más facilona si se quiere ver así. Aunque, ya digo, francamente, pienso que en el caso del sistema que nos ocupa, si un usuario "autor" debe hacer cosas de administrador... tal vez lo suyo sería "promoverle" a usuario "administrador".

De hecho, mirando en WordPress (referencia obligada del sistema de que tratamos), no veo que puedan cambiarse los privilegios por separado, sino que, como en mi sistema (mi tesooooro), sólamente puede asignarse a un usuario un determinado "rol", que a su vez conlleva una serie de permisos rígidamente establecidos, si no me equivoco.

Me apena encontrarme en el estado de ánimo en que estoy, porque, he mirado el código de WordPress para muchas cosas, y, sin embargo, con este tema de los "roles", es como si me empeñara en mantener lo que tengo hecho... en no ir más allá... ni siquiera en averiguar cómo es que en WordPress el asunto "parece" tan "complicado", qué se esconde ahí para que sea así...

Tal vez lo haga. Y hasta tal vez no me quede más remedio que hacerlo.

Gracias otra vez Delphius, y gracias adelantadas a todo aquél que se una a este hilo de alguna forma.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 16-11-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
Poder: 24
fjcg02 Va camino a la fama
Bueno Dec, sin ánimo de meter la pata, te comento cómo lo haría yo.

Teniendo en cuenta que no vas por mal camino, es decir, que un usuario con un perfil de un tipo, si se requiere que haga otro tipo de acciones, se le promociona o cambia por parte de un administrador y santas pascuas.

Mi punto de vista es parecido al tuyo, pero añadiría algo más.
Por lo que he leido, asignas a cada usuario un rol, y dependiendo del que tenga, por aplicación permites o restringes el acceso a las partallas/opciones correspondientes.
Me parece buena idea, pero no suficiente.
Yo añadiría tantos roles como tienes en la BBDD, asignando a cada usuario los accesos extrictamente necesarios en la bbdd.
Es decir, en la tabla de la bbdd USUARIOS, un campo será el perfil, y también los valores para rellenar esas matrices que nos has mostrado. Asociado a estos perfiles, tendrías que tener en la bbdd tantos roles como perfiles. Cuando se asigna un perfil a un usuario, se le asigna el rol correspondiente. De esta manera, si alguine se 'cuela', sólo podría acceder a aquello que tú le permites.
Metiendonos en harina:
Roles Administrador, Editor y Autor, acceso de lectura a todas las tablas. Entiendo que pueden leer todos todo.
Rol Administrador: Acceso total a todas las tablas.
Rol Editor: Acceso total a las tablas SITE, MANAGE_LINKS, TERMS, POSTS, PROFILE, COMMENTS] : Leer, borrar editar registros
Rol Autor: Idem que Editor con sus particularidades; SITE, POSTS, PROFILE

Si los datos no se almacenan en tablas, sino en directorios, lo mismo con los usuarios definidos y sus accesos correspondientes a los directorios.

Ahora debes poner en la balanza el coste beneficio de la gestión de todo esto. Puede que sea un poco engorroso al principio.

Espero que te sirva de ayuda.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #12  
Antiguo 17-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias fjcg02. Claro que sí, tengo en cuenta todo lo que decís.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #13  
Antiguo 19-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 22
walito Va por buen camino
Cita:
Empezado por dec Ver Mensaje
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.
Dec, la mejor opcion es esa que tu comentas ahi, yo hice algo parecido pero en delphi donde formas un arbol con los permios.
Yo lo hice asi:
[modulo]->[submodulo]->[permisos]->[agregas, editar, borrar, etc]

Yo lo cargo de la sig forma:
[nombreModulo][listousuarios][permiso][listar]
[nombreModulo][listousuarios][permiso][imprimir]
[nombreModulo][listousuarios][permiso][ver]

[nombreModulo][agregaeditausuarios][permiso][editar]

Despues con una funcion le paso los 2 primeros parametros, y en el 3ro pregunto si ese permiso esta seteado

GetPermisos('nombreModulo', 'agregaeditausuarios', 'agregar'): boolean

entonces siempre que cargues la pagina en php antes de todo segun tus opcion verificar si tiene o no esos permisos, en caso de que no tenga permisos, el boton o lo que fuese lo desactivas.

Es una idea que me surgio y quedo andando a la perfeccion.

Saludos
Responder Con Cita
  #14  
Antiguo 19-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 22
walito Va por buen camino
Dec, cualquier cosa que necesites de PHP avisame por este medio, tengo bastante experiencia en php.

Asi ya quedan mis respuestas en el foro para que alguien las use
Responder Con Cita
  #15  
Antiguo 19-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias Walito. Ahí andamos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usuarios y roles morta71 Firebird e Interbase 10 05-02-2008 09:36:58
Permisos, roles y usuarios TJose Firebird e Interbase 0 04-04-2005 16:22:19
Recuperar roles y lista de usuarios de la DB alehillebrand Firebird e Interbase 3 19-02-2005 19:14:21
roles, sesiones y usuarios de oracle 7.3 y delphi 7 rcrmilo Oracle 12 03-06-2004 19:22:23
Roles - Usuarios y privilegios Osorio Firebird e Interbase 2 13-02-2004 23:34:31


La franja horaria es GMT +2. Ahora son las 03:32:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi