5

He estado teniendo casi los mismos problemas que Victor Martin (puede ver las preguntas aquí).Autorización declarativa y el atributo if no funciona

Tengo una autorización declarativa que funciona para casi todo lo que no implica el uso de condicionales. P.ej.

has_permission_on :users, :to => [:edit, :update, :destroy] do 
if_attribute :user => is { current_user } 
end 

¿Existen riesgos comunes con la autorización declarativa? Estoy usando authlogic y sospecho que el método 'current_user' en el controlador de la aplicación podría ser el origen del problema.

+0

Terminé usando cancán para authorizaiton - lo recomiendo altamente – digitalWestie

Respuesta

4

Tenga en cuenta que si utiliza "filter_access_to" en los controladores, debe asegurarse de tener ": attribute_check => true". Sin él, las declaraciones condicionales "if_attribute" no hacen nada.

Más detalles sobre este in the Declarative Authorization docs

1

Es necesario agregar esto a su ApplicationController si no lo ha hecho:

before_filter :set_current_user 
protected 
def set_current_user 
    Authorization.current_user = current_user 
end 

A continuación, sus normas se vería así:

has_permission_on :users, :to => [:edit, :update, :destroy] do 
    if_attribute :user => is { user } 
end 

Por lo que yo sé no lo hace declarative_authorization llame a cualquier método en el crontroller y no sabe qué significa current_user en su ejemplo, pero le da una instancia de Authorization.current_user llamada user que puede usar en su archivo authorization_rules.rb.

+0

bien, me trató de usar 'usuario' en lugar de 'current_user'. Ahora que lo he hecho, prácticamente tengo todo lo anterior, pero todavía no funciona. :/ – digitalWestie

+0

¿Recibes errores o simplemente "permiso denegado"? ¿Qué está diciendo tu registro? –

Cuestiones relacionadas