declarative_authorization et problèmes authlogic
-
20-09-2019 - |
Question
(Disclaimer: Je suis très nouveau sur les rails)
Ce plugin semble que ce sera un grand ajustement pour mon application, mais je suis ayant du mal à le faire fonctionner. Je l'utilise avec authlogic, je ne suis pas sûr que ce soit le problème, mais il semble que cela peut être.
Lorsque je tente d'accéder à une page que mon rôle d'administrateur doit avoir accès à I obtenir ceci:
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]
J'ai dans mon modèle d'utilisateur def role_symbols (Rôles || []) {carte |. R | r.name.to_sym} fin
Mais il ne semble pas appeler comme ça. I pense qui peuvent être coeur du problème, mais je me demande aussi si elle a quelque chose à voir avec les user_sessions?
est aussi ce que mon application_controller ressemble à:
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
Je l'ai fait profiter l'administration pour refléter le fait 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 vous avez des idées, je serais très heureux. Merci.
La solution
Apparemment, l'application charge les règles de la table rôles correctement, mais ne pas charger le fichier config / authorization_rules.rb correctement. S'il vous plaît vérifier le fichier, son nom et la syntaxe utilisée.
Essayez d'utiliser les privilèges authorization_rules.rb ; comme ceci:
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
Et le contrôleur entreprises?
Bonne chance.
Autres conseils
Je l'ai fait profiter l'administration pour refléter le fait que
Que voulez-vous dire par là? Le rôle d'administrateur doit être en majuscule dans le fichier authorization_rules.rb
comme méthode de role_symbols
semble fonctionner et revient [:Admin]
comme un tableau de rôles d'utilisateur. Vous pouvez voir que dans le journal:
(roles [:Admin], privileges [:show], context :companies)
Cela signifie que l'utilisateur a les rôles spécifiés, mais a besoin d'au moins un des privilèges énumérés pour accéder au contexte / ressources. Ainsi, votre authorization_rules.rb
doit avoir un rôle :Admin
capitalisé.