2011-01-20 20 views
5

Estoy cambiando algunas de mis acciones personalizadas de CanCan en la clase Ability para usar bloques en lugar de solo un hash, pero ahora han dejado de restringir el acceso. Lo curioso es que las acciones integradas como: manage y: create, etc. parecen funcionar bien con los bloques.Las acciones personalizadas de CanCan no funcionan con los bloques

Este es un ejemplo:

VIEJO

# this one works 
can :share, Project, :user_id => user.id 

NUEVO

# this one doesn't work 
can :share, Project do |project| 
    project.users.exists?(user) 
end 

Cualquier persona con este problema antes?

Respuesta

1

No puedo decir mucho acerca de su comportamiento no deseado, pero probablemente no deba cambiar hash para bloquear, ya que estos hashes le dan la capacidad de recuperar registros. Lea this article cuidadosamente en la wiki de CanCan.

+0

Créanme, no quiero usar los bloques pero parece ser la única manera de hacerlo en mi caso. Pasé de una relación uno a muchos entre proyectos y usuarios a muchos, por lo que ahora debo verificar a todos los usuarios en un proyecto, no solo uno. – Matt

+0

Hmm, intente utilizar el depurador y vea qué sucede en CanCan cuando compruebe la capacidad. O abra y edite los archivos de cancan gem en su sistema de archivos y vea qué pasa por las variables de dumping. Así es como me mantengo en el camino cuando no puedo pensar en otra cosa. Por supuesto revertir los archivos;) – Mirko

Cuestiones relacionadas