declarative_authorization y problemas authlogic
-
20-09-2019 - |
Pregunta
(Negación: Soy muy nuevo a los rieles)
Este plugin parece que va a ser un gran ajuste para mi aplicación, pero estoy teniendo dificultades para conseguir que funcione. Lo estoy usando con authlogic, me no estoy seguro de si ese es el problema, pero parece que ésta sea.
Cuando intento un acceso a una página que mi rol de administrador debe tener acceso a la I conseguir esto:
Processing CompaniesController#show (for 127.0.0.1 at 2010-02-12
23:26:44) [GET]
Parameters: {"action"=>"show", "id"=>"1", "controller"=>"companies",
"battalion_id"=>"1"}
User Load (0.000681) SELECT * FROM "users" WHERE ("users"."id" =
'147') LIMIT 1
User Update (0.000622) UPDATE "users" SET "perishable_token" =
'tUyTl1eZDQSJwp_PFw7c', "last_request_at" = '2010-02-13 05:26:44',
"updated_at" = '2010-02-13 05:26:44' WHERE "id" = 147
Role Load (0.000334) SELECT * FROM "roles" WHERE ("roles".user_id
= 147)
Permission denied: No matching rules found for show for #<User id:
147, user_type: nil, login: "lauren_roth", name: "Lauren
Rothlisberger", email: "laurenrothlisber...@gmail.com",
crypted_password:
"d835a2cdf15ef449d0980e706fd86d7a9a7a0a23d0d79d6f18f...",
password_salt: "_Qz_z8eZOhKHcsPsBsoP", created_at: "2010-02-12
16:37:53", updated_at: "2010-02-13 05:26:44", old_remember_token: nil,
old_remember_token_expires_at: nil, old_activation_code: nil,
activated_at: nil, old_password_reset_code: nil, enabled: true,
identity_url: nil, invitation_id: nil, invitation_limit: nil,
position: "Admin", battalion_id: nil, company_id: nil, soldier_id:
nil, login_count: 68, failed_login_count: 0, last_request_at:
"2010-02-13 05:26:44", current_login_at: "2010-02-13 05:20:59",
last_login_at: "2010-02-13 05:19:57", current_login_ip: "127.0.0.1",
last_login_ip: "127.0.0.1", persistence_token:
"28fc9b60853045cd4e43a001b4258940a7e8f9ac50b08df6a6d...",
single_access_token: "bKgYvuRtLqauufljZDoV", perishable_token:
"tUyTl1eZDQSJwp_PFw7c", active: true, platoon_id: nil> (roles
[:Admin], privileges [:show], context :companies).
Filter chain halted as [:filter_access_filter] rendered_or_redirected.
Completed in 27ms (View: 1, DB: 0 3 queries) | 403 Forbidden [http://
localhost/battalions/1/companies/1]
Tengo esto en mi modelo de usuario role_symbols def (Papeles || []) {mapa |. R | r.name.to_sym} final
Sin embargo, no parece estar llamando eso. I piensan que puede ser el corazón del problema, pero también me pregunto si tiene algo que ver con los user_sessions?
También esto es lo que mi application_controller se ve así:
helper_method :current_user_session, :current_user
filter_parameter_logging :password, :password_confirmation
before_filter :set_current_user
protected
def set_current_user
Authorization.current_user = current_user
end
def current_user_session
return @current_user_session if defined? (@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def store_location
session[:return_to] = request.request_uri
end
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
Here is my authorization_rules.rb
Lo hice en mayúscula la administración para reflejar que:
authorization do
role :guest do
has_permission_on :user_sessions, :to => [:create, :update]
end
role :Admin do
has_permission_on :companies, :to => [:index, :show]
end
end
Si usted tiene alguna idea que sería de gran aprecio. Gracias.
Solución
Al parecer, la aplicación carga las reglas de la tabla funciones correctamente, pero no cargue el archivo de configuración / authorization_rules.rb correctamente. Por favor, compruebe el archivo, su nombre y la sintaxis utilizada.
Trate de usar los privilegios en authorization_rules.rb ; de esta manera:
privileges do
privilege :manage, :includes => [:create, :read, :update, :delete]
privilege :read, :includes => [:index, :show]
privilege :create, :includes => :new
privilege :update, :includes => :edit
privilege :delete, :includes => :destroy
end
Y qué pasa con el controlador de Empresas?
Buena suerte.
Otros consejos
Lo hice en mayúscula la administración para reflejar que
¿Qué quiere decir con eso? El rol de administrador debe ser capitalizada en el archivo authorization_rules.rb
como el método role_symbols
parece estar funcionando y está regresando [:Admin]
como una matriz de funciones de usuario. Se puede ver que en el registro:
(roles [:Admin], privileges [:show], context :companies)
Esto significa que el usuario actual tiene los roles especificados, pero necesita al menos uno de los privilegios de la lista para acceder al contexto / recurso. Por lo que su authorization_rules.rb
tiene que tener un papel :Admin
capitalizado.