2011-10-03 9 views

Respuesta

10

enfoque de Vitaly que parece una buena solución, pero tiene un error grave que otorga acceso de administrador a cualquier persona que intente iniciar sesión, incluso si sus credenciales son incorrectas. (Publicación de esto como una respuesta con la esperanza de que se upvoted y la gente no aceptan ciegamente la respuesta "correcta", con su fallo de seguridad)

En primer lugar, un par de pruebas funcionales (en acciones que requieren autenticación):

test "admin is set with correct credentials" do 
    @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "pass") 
    get :index 
    assert_response 200 
    assert_equal true, session[:admin] 
end 

test "admin isn't set with incorrect credentials" do 
    @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "incorrect") 
    get :index 
    assert_response 401 
    assert_not_equal true, session[:admin] 
end 

Si ejecuta esto con el código de Vitaly, la segunda prueba falla porque session[:admin] se establece en verdadero, aunque la contraseña sea incorrecta.

Aquí está mi código para establecer adecuadamente session[:admin] y hacer que pasen las dos pruebas:

private 
def authenticate 
    authenticate_or_request_with_http_basic do |user_name, password| 
    session[:admin] = (user_name == "name" && password == "pass") 
    end 
end 
+0

Gracias, tienes razón. ¿Cómo fue que cometí ese error? Espero que mucha gente no lo afecte. Perdón por haber llegado tan tarde cambiando la respuesta correcta. No he notado la notificación. – Vitaly

0

Puede hacer que el trabajo CanCan con autenticación básica, lea esta guía https://github.com/ryanb/cancan/wiki/changing-defaults, a continuación, sólo tiene que utilizar CanCan como por lo general, se puede establecer permisos basado en el nombre de usuario conectado.

+0

Se ve bien, pero añade complejidad no es necesario. Pienso en la disponibilidad del uso de la sesión para verificar si el usuario está conectado o no. ¿Algunas ideas? – Vitaly

Cuestiones relacionadas