![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Hola,
Gracias Caral. Bueno. Yo hago algo parecido en la aplicación que comento. En una tabla de la base de datos se guarda lo necesario para "asignar a cada usuario" un "nivel". Cuando un usuario se autentica en la aplicación se recoge el dato y desde ese momento el usuario tiene ya un nivel asignado, un rol, y, por tanto, unas "capacidades". Pero, hasta el momento, únicamente estoy evitando que un usuario puede hacer esta o aquella cosa, desde la propia interfaz. Básicamente, lo que he comentado antes: un usuario trata de acceder al formulario de inserción de registros; se comprueban sus permisos; no tiene suficientes; se le redirige a otro lugar, no se le enseña el formulario en cuestión. Pero, si el usuario tiene permisos... la intefaz "le deja pasar", y, cuando el usuario inserte un nuevo registro, pongamos por caso, se ejecuta un determinado método de una clase "BD". Es en esta clase donde ahora mismo no distingo entre usuarios... es decir, es como si dijera, "oyes, si has podido ejecutar este método, entonces asumo que tienes los permisos para ejecutarlo". Y no sé si eso basta o si tendría que también ahí, en el propio método que inserta nuevos registros a la base de datos, si tendría, digo, que volver a comprobar si el usuario en cuestión tiene o no permisos suficientes. Lo de menos es hacerlo. O sea, que no es por no hacerlo, es que no estoy seguro de que se deban de enfocar así las cosas o qué. Un "plugin" viene a ser una especie de añadido a la aplicación. Digamos que la aplicación no puede imprimir registros. Pero, permite "instalar plugins", de modo que algún plugin pueda imprimir, efectivamente, registros. Ahora bien, aquí está parte del asunto que me preocupa: el plugin no "pasa" por la interfaz. El plugin se ejecuta "junto con la aplicación", no es un usuario, y, por tanto, no necesita pasar por un formulario en la interfaz para acceder a los registros, por ejemplo. Ahora bien, entonces, me pregunto ahora, ¿es el autor del supuesto plugin quien tiene que preocuparse de que un usuario tenga permisos suficientes para hacer esta o aquella cosa? ¿En todo caso, independientemente de lo que haga el plugin, en todo caso, digo, sería mejor que el método de la clase "BD" que añade registros a la base de datos, comprobara si el usuario que ejecuta el método tiene permisos o no los tiene? Pensando en ello comienzo a pensar de esta manera... creo que va a ser necesario que el propio método compruebe si el usuario dispone de permisos... además de la interfaz... Y ya digo, que no es por no hacerlo así, sino que me quedan dudas... ![]() |
|
#2
|
||||
|
||||
|
Hola
Bueno como hace rato de no doy una, pues una mas no cuenta. ![]() A lo que entiendo un plugin es un programa aparte que permite conectarse con el programa (principal) y hacer ciertas cosas. Bueno, normalmente lo que hacemos es conectarnos a la bd directamente desde el programa, es lo mas facil. Hacer una comprobacion de cada paso por usuario me parece que seria lento y ademas mucho codigo. Que tal hacer un programa aparte que sea este el que se conecte a la bd y que tanto el programa principal como el plugin tengan que pasar por el?, (este seria el que comprobaría los permisos). Ya se, la idea descabellada, no se puede esperar mucho del novato. ![]() ![]() Saludos Última edición por Caral fecha: 16-11-2007 a las 20:38:33. |
|
#3
|
||||
|
||||
|
Hola,
Sí ArdiIIa, lo cierto es que muchas ideas estoy cogiendo de WordPress, por ejemplo. Pero que muchas... sin ir más lejos esto de los "roles" de usuario, en buena medida viene de ahí, sin embargo, en esto me he apartado un poco... bastante. Y he mirado por encima el asunto de los "roles" de usuario en WordPress... y me asusta. De hecho, lo he contado hoy en mi weblog, estoy temiendo que se me caiga todo el teatro encima, porque,... se me ha hecho tan "sencillo" que no me lo creo... algo fallará tarde o temprano... casi estoy seguro... o, lo que es peor aún, no estoy seguro... Y, Caral, lo que dices no es ninguna tontería. Algo así he pensado yo también, si bien ahora mismo no sería capaz de explicar el tema. Sin embargo, comprobar si un usuario puede insertar registros, por ejemplo... significa una línea de código... es algo así como esto: Código PHP:
Pero,... ahora, con el tema de los usuarios... Vamos a suponer una cosa. Supongamos que la aplicación no tiene plugins ni los va a tener. ¿En este caso el asunto parece más claro, no? Quiero decir, el usuario no "llama métodos" de la clase "BD". Es la interfaz de la aplicación la que, por decirlo así, llama los métodos oportunos de la clase "BD". En este caso, si un usuario no puede añadir registros, por ejemplo, no tendrá jamás acceso al formulario que los añade, y, por tanto, no podrá añadirlos, sin más. ¿Verdad que esto sí que parece más claro? A mí me lo parece, por lo menos... no sé si es tan claro como me parece a mí... Pero, si "alguien" más puede llamar métodos de la clase "BD", como un plugin de la aplicación, por ejemplo, entonces ya es otra cosa... ¿Al menos los métodos "susceptibles" de ser llamados por un plugin deberían controlar si el usuario cuenta con los permisos suficientes? ¿O todos los métodos de la clase "BD" deben hacer esta comprobación? Por otro lado, se me ocurre al hilo de lo que escribo, y siguiendo un poco lo que dices Caral, fíjate, ¿no podría contarse con un "módulo" aparte, que hiciera las veces de "interfaz" entre la clase "BD" y los plugins? De este modo, los plugins no podrían sino comunicarse con dicha interfaz, y, ahora sí, la interfaz comprobaría que el usuario de turno tiene los permisos suficientes para hacer esta o tal cosa... hum... tal vez por aquí pueden ir los tiros. Otra cosa sería, claro está, impedir que un plugin hiciera uso de la clase "BD"... la aplicación hace uso de la clase "BD" en una determinada forma: esta clase se instancia en una variable "global", que, por tanto, estaría disponible para los plugins... así que... no sé yo si estamos en las mismas... aunque, quizá hemos avanzado algo, y, por otro lado, tal vez podría encontrarse la forma de averiguar si es un "plugin" quien ejecuta un determinado método de la clase "BD", aunque, a bote pronto, me parece complicado... |
|
#4
|
||||
|
||||
|
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:
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:
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. ![]() Última edición por dec fecha: 16-11-2007 a las 21:16:38. |
|
#5
|
||||
|
||||
|
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 |
|
#6
|
||||
|
||||
|
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. ![]() Última edición por dec fecha: 16-11-2007 a las 21:39:01. |
|
#7
|
||||
|
||||
|
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... ![]() |
|
#8
|
||||
|
||||
|
Cita:
![]() ![]() Cita:
![]() ![]() 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 |
|
#9
|
||||
|
||||
|
Hola,
No creáis a ArdiIIa, ¡no le da ese error! Otro tal vez, ¡pero ese no! ![]() PD. Gracias. ![]() |
|
#10
|
||||
|
||||
|
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, |
|
#11
|
||||
|
||||
|
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. ![]() |
|
#12
|
||||
|
||||
|
Cita:
![]() 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:
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 ¿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, |
|
#13
|
||||
|
||||
|
Cita:
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 |
|
#14
|
||||
|
||||
|
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 ![]() |
|
#15
|
||||
|
||||
|
Hola,
Gracias Walito. Ahí andamos. ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|