[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