[Hacking-es] Duda con Lockdown
Andrés gutiérrez
andresgutgon at gmail.com
Sun Nov 8 00:34:23 GMT 2009
Hola, creo que he encontrado la solución. En este link el autor de la gema
explica como hacerlo [1] pero a mi me estaba dando el problema que he
comentado abajo. Y creo que era porque al
comprobar si el propietario del registro (user_owner) pertenece al grupo de
administradores lo que estaba haciendo era añadirlo a ese grupo. Esto pasa
en
#user.rb
def editor_ids
ug = UserGroup.find_by_name('Admins')
# Return the user_ids associated to the user group plus this user's id
ug.user_ids |= [self.id]
end
En otro sitio [2] propone otro metodo que al menos a mi me sirve de momento.
def editable_by
@editable_by_ids ||= UserGroup.find_by_name("Admins").user_ids | [id]
end
Cualquiera de estos dos metodos hay que usarlos aqui:
set_permission(:admin_profiles).with_controller(:users)
set_permission(:user_owner).with_controller(:users).except_methods(:index,:destroy).to_model(:user).where(:editable_by).includes(:current_user_id)
La verdad es que Lockdown es bastante nuevo, pero viendo el lighthouse del
autor [3] se nota que tiene ilusion por mejorarlo. Y a mi me gusta mucho la
idea de poder gestionar todos los permisos desde un unico archivo y no
tenerlos esparcidos por los controladores.
Buenas noches
NOTA:
Si teneis opiniones en contra o a favor de Lockdown me gustaria escucharlas.
[1] http://stonean.com/page/lockdown-model-restriction-use-cases
[2]
http://blog.js.hu/2009/07/24/add-authlogic-and-lockdown-to-your-rails-app/
[3]http://stonean.lighthouseapp.com/projects/33317-lockdown/overview
El 8 de noviembre de 2009 00:03, Andrés gutiérrez
<andresgutgon at gmail.com>escribió:
> Hola, esta pregunta va dirigida a algun miembro de la lista que ya haya
> usado LockDown [1]
>
> Para los que no lo hayan usado, esta es una descripcion muy breve:
> *LockDown*: Es un RBAC (role based Acces control). Un sistema de roles
> para App rails. En principio me gusta y lo estoy intentando usar con
> Authlogic (sitema de autentificación) [2].
>
> MI PROBLEMA:
> En principio tengo un usuario que no esta asociado con un user_gropup
> (admins). Esto lo se porque lo he visto en la tabla user_groups_users. No
> esta su id relacionadolo con ese user_group (admins).
> bien, lo que me pasa es que cuando voy a la vista show del modelo user. Y
> estoy logado con ese usuario, en el log se me genera el SQL siguiente:
>
> ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
> SQL (0.1ms) SET NAMES 'utf8'
> SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
>
>
> Processing UsersController#show (for 127.0.0.1 at 2009-11-07 23:46:33)
> [GET]
> Parameters: {"action"=>"show", "id"=>"5", "controller"=>"users"}
> User Columns (1.5ms) SHOW FIELDS FROM `users`
> User Load (0.3ms) SELECT * FROM `users` WHERE (`users`.`id` = 5)
> UserGroup Columns (1.0ms) SHOW FIELDS FROM `user_groups`
> UserGroup Load (0.2ms) SELECT * FROM `user_groups` WHERE
> (`user_groups`.`name` = 'Admins') LIMIT 1
> User Load (0.2ms) SELECT `users`.id FROM `users` INNER JOIN
> `user_groups_users` ON `users`.id = `user_groups_users`.user_id WHERE
> (`user_groups_users`.user_group_id = 3 )
> User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` IN (1,5))
> user_groups_users Columns (1.1ms) SHOW FIELDS FROM `user_groups_users`
> User Load (0.2ms) SELECT * FROM `users` INNER JOIN `user_groups_users`
> ON `users`.id = `user_groups_users`.user_id WHERE
> (`user_groups_users`.user_group_id = 3 )
> * SQL (0.1ms) BEGIN
> SQL (0.9ms) describe `user_groups_users`
> SQL (0.1ms) INSERT INTO `user_groups_users` (`user_id`,
> `user_group_id`) VALUES (5, 3)
> SQL (0.4ms) COMMIT*
> User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 5)
> Rendering template within layouts/application
> Rendering users/show
> User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = '5')
> LIMIT 1
> SQL (0.1ms) BEGIN
> User Update (0.2ms) UPDATE `users` SET `updated_at` = '2009-11-07
> 22:46:33', `perishable_token` = 'Q9UELUjs1WaoNSVgzod5', `last_request_at` =
> '2009-11-07 22:46:33' WHERE `id` = 5
> SQL (0.4ms) COMMIT
> Completed in 111ms (View: 38, DB: 8) | 200 OK [http://localhost/users/5]
>
>
> ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>
> Como veis me esta haciendo un INSERT en la tabla user_groups_users
> relacionandome ese user_group (admins) con ese usuario.
> Para mi esto es muy raro ya que solo he visitado la vista show, no he hecho
> ninguna acción (POST) en ningun formulario.
>
>
> Tengo definidos estos permisos:
> # Administration permissions
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> set_permission(:admin_profiles).with_controller(:users).except_methods(:index)
>
> set_permission(:user_owner).with_controller(:users).except_methods(:index,:destroy).to_model(:user).where(:editor_ids).includes(:current_user_id)
>
>
> set_protected_access :user_owner
>
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> # APP ROLES
> # Aquí están los definidos para la logica de la App, pero a parte hay un
> super usuario con ROLE(user_group) = "Administrators"
>
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> # members role
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> set_user_group(:members
> )
> # Admins role
> #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> set_user_group(:admins,
> :admin_profiles,
> )
>
> Se que es dificil determinar lo que me pasa solo leyendo un mail. Desde ya
> muchas gracias
>
> Un saludo,
>
> Andrés
>
>
> [1] http://stonean.com/page/lockdown
> [2] http://github.com/binarylogic/authlogic
>
> --
> Experiencia es lo que obtienes, cuando no obtienes lo que quieres.
>
> -----------------------------------------------------------------------------
> "Caminar sobre el agua y desarrollar software a partir de unas
> especificaciones es fácil. si ambas están congeladas."
> Edward V. Berard, ingeniero informático.
>
--
Experiencia es lo que obtienes, cuando no obtienes lo que quieres.
-----------------------------------------------------------------------------
"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil. si ambas están congeladas."
Edward V. Berard, ingeniero informático.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/hacking-es/attachments/20091108/52b16845/attachment-0001.htm
More information about the Hacking-es
mailing list