| Login | Tour | Inicio | Chat | Descargas | Wallpapers | Páginas recientes | FAQ | | ||
Custom Search
![]() CRIPTOGRAFÍA EN LA PRESIDENCIA DE PORFIRIO DÍAZ tonathiu “Yo no tengo que explicarle por qué no: usted debe explicarme por qué sí.” tonathiu Authors@Google: Noam Chomsky aarkerio PDF Helper aarkerio Emacs como IDE para CakePHP aarkerio La Negación del Viaje Lunar tonathiu Porque los mononeurones si tenemos madre! blacksoul BrunoFerías thot The Art vendaval Aclimatación extraterrestre ¿para qué? ahuramazdah Pidiendo OpenSolaris 2008.5 vendaval Sospechosismo aarkerio Sistema Infalible ordbal Slackware 12.1 Final vendaval Calderón puede ser sujeto a juicio político, sostiene Carrancá tonathiu La desnutrición en México aarkerio Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D asarch Histórico aarkerio Indonesia: Nueva muerte por gripe aviar saidjose Amarok 2 vendaval ![]() GNU/Linux ![]() Hacktivismo ![]() Debian ![]() NetBSD ![]() WWW ![]() Guia Linux ![]() Server Side ![]() Ofimatica ![]() Despabilando... ![]() Mundo Maya ![]() Literatura ![]() Agora ![]() Psicologia ![]() Economia ![]() Ambientalismo ![]() Desarrollo Biologia ![]() |
Desarrollo \ othAuth, users and permissions on CakePHP Este artículo ha sido consultado en 1,455 ocasiones. othAuth es una solución de manejo de permisos en el framework CakePHP, está desarrollada por admin_delete(), admin_add(), admin_listing(), etcétera. Estos métodos del controlador son de acceso restringido y othAuth nos ayuda a restringir el paso. Las tablas se usan de manera muy simple, creamos la tabla "groups": Luego agregamos uno o más grupos en la tabla "groups", en el caso de Centauro sólo tenemos dos grupos, "admin" y "users": INSERT INTO groups ("name", "level", "perm_type", "redirect") VALUES ('admin', 100, 'allow', '/news/view'); El campo "redirect" indica donde se debe redireccionar al usuario después de logeado. El campo group_id indica a que grupos peretence el usuario, en nuestro caso sí³lo puede pertenecer al grupo "admin" (group_id=1) o a "users" (group_id=2). Como señalamos antes, esta tabla tiene más columnas que la que tiene la tabla "users" de la documentación de othAuth porque nosotros necesitamos informacií³n extra. Ahora agregamos un usuario a la tabla users: El usuario "webmaster" pertenece al grupo "admin" y su password en md5 es "admin". Bien ahora vamos a crear la tabla de permisos, "permissions": CREATE TABLE permissions ( Agregamos algunos permisos: --Blog entries Es decir el URL 'admin/entries/add' tiene el permiso 13, 'admin/entries/edit' el 14, 'admin/entries/delete' el 15, etcétera. Estos permisos existen pero no los posee ningíºn grupo (y por lo tanto ningíºn usuario). Vincular los permisios con los grupos de usuarios es precisamente lo que hace la tabla "groups_permissions" que creamos así: CREATE TABLE groups_permissions ( Ahora le damos permisos al grupo 1 (admin) a los URL del 13 al 17: INSERT INTO groups_permissions (group_id, permission_id) VALUES (1, 13); Esto quiere decir que el usuario "webmaster" ahora tiene permisos CRUD (create, read, update and delete) para los métodos admin_add, admin_edit y admin_delete del controlador app/controllers/entries_controller.php. Tiene estos permisos porque pertenece al group_id que es igual a "1". (El URL 'admin/entries/start' es sólo el homepage de la zona admin y no es importante). Para darle permisos a los usuarios del grupo "users" tendríamos que vincular el id del permiso con el id del grupo "users": INSERT INTO groups_permissions (group_id, permission_id) VALUES (2, 13); Sencillo ¿no?, Necesitamos el archivo app/models/group.php para la tabla "groups": class Group extends AppModel En el archivo app/app_controller.php necesitamos agregar el array público $othAuthRestrictions: public $othAuthRestrictions = array('admin_add','admin_edit','admin_delete', 'admin_listing', 'admin_start'); Este arregalo le indica a othAuth cuáles métodos en los controladores de nuestro programa deben ser revisados antes de presentarlos, esto para checar que el usuario realmente tenga permisos. Dentro del método beforeFilter() de app_controller.php debemos declarar el arreglo $auth_conf, este arreglo configura algunas opciones de ohAuth: $auth_conf = array( Al estar en beforeFilter() de app_controller.php, othAuth se ejecuta antes que el método para revisar la seguridad. Además como se indica en a documnetación, el método unbindAll() se debe colocar en app/app_model.php para que othAth no tenga que lidiar con arreglos demasiado grandes. Como indicamos en el array$auth_conf, la página donde los usuarios se logean es /users/login, es decir debemos tener un método login en el controlador users_conroller.php : public function login(){ $this->pageTitle = 'Login :: Centauro'; $this->set('Element', $this->Portal->statics()); if (isset($this->data['User'])) { $auth_num = $this->othAuth->login($this->data['User']); $this->set('auth_msg', $this->othAuth->getMsg($auth_num)); } Este método revisa que el login y la contraseña que el usuario puso en el formulario de logeo sean los correctos, si es así othAuth inicia una sesión y asigna los permisos definidos en la tabla groups_permissions al usuario que se acaba de logear. Una vez que el usuario se ha logeado podemos recuperar su información con el componente oth_auth.php, por ejemplo en cualquier controlador podemos pintar la info del usuario: echo "El id del usuario es " . $this->othAuth->user('id') . "BR"; En las vistas usamos el helper oth_auth.php echo "Páginas de " . $othAuth->user('username') ; if ($this->othAuth->user('group_id') == 1 ) { echo "You can see this because you are admin"; } Cualquier duda poner un comentario o nos vemos en el IRC: irc.freenode.net#mononeurona.org Nota: también estoy usando las tablas login_attempts y cake_sessions pues estoy guardando las sesiones en la base de dats en vez de usar /tmp --- CAKE PHP SESSIONS AND othAuth CREATE TABLE login_attempts ( id serial PRIMARY KEY, ip character varying(15) NOT NULL, num integer DEFAULT 1 NOT NULL, expire timestamp(0) with time zone DEFAULT now() NOT NULL, created timestamp(0) with time zone DEFAULT now() NOT NULL ); CREATE TABLE cake_sessions ( id character varying(255) NOT NULL DEFAULT '' PRIMARY KEY, data text, expires integer ); En necesario indicar que se va a usar la BD para salvar las sesionee en el archivo app/config/core.php. Ficha del autor: aarkerio manuel_ARRROBA_mononeurona.org Manuel Montoya estudió neuropsicología en la facultad y en el Instituto de Biomédicas de la UNAM. Trabajó en Compaq de México como diseñador de software, tiene diez años de experiencia en Java, PHP y SQL. Le interesan muchas cosas y neciamente le da por escribir sobre todas ellas. Actualmente trabaja en Chipotle Software, desarrollando Karamelo, una herramienta de e-Learning. Jedit.org y WindowMaker son su editor y escritorio favoritos. The most effective way to restrict democracy is to transfer decision making from the public arena to unaccountable institutions. Chomsky. Ver todos los articulos de aarkerio Última actualización: 2007-06-25 12:02:25-05 |
![]() comiendo pastura 11 hours, 16 minutes ago Faltan 10 minutos para cerrar el chagarro, eh irme a comer 14 hours, 10 minutes ago Trabajando, yo si trabajo ;-) 16 hours, 39 minutes ago Que felicidad! :'-D 17 hours, 13 minutes ago Solucionado problema del viernes en una WorkStation xw6000 :-D gracias al chntpw! 17 hours, 13 minutes ago Escuchando a Raven Crown/Winter wind 18 hours, 16 minutes ago Que estuvimos haciendo >> 10486 lecturas Sexualidad infantil y juvenil 9219 lecturas Anticoncepción de Emergencia 7936 lecturas Rompiendo cualquier clave WEP en unos pocos minutos 6964 lecturas Sinapsis y exocitosis 6304 lecturas Mi primer CakePHP, mmmmm cakeee 5282 lecturas Evolución filética en las hepáticas 4732 lecturas BASH y Primeros Comandos 4033 lecturas CakePHP II Active Record 3762 lecturas Cómo convertirse en hacker 3634 lecturas
|
| ||
| Celos son hijos del amor, mas son bastardos, te confieso. Lope de Vega | ||
| Este trabajo está licenciado bajo la MonoNeurona Commons License. 2002-2008 © :: Colectivo MonoNeurona.org :: | ||