2010-02-13 4 views
1

(Отказ от ответственности: Я очень новичок в рельсы)declarative_authorization и authlogic проблема

Этот плагин выглядит, как он будет отлично подходит для моего приложения, но я с трудом заставить его работать. Я использую его с authlogic, я не знаю, если это проблема, но кажется, что это может быть.

При попытке доступа на страницу, которая мои админы роль должна иметь доступ к I получить это:

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: "[email protected]", 
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] 

У меня есть это в моей модели пользователя четкости role_symbols (роли || []). map {| r | r.name.to_sym} конец

Но, похоже, это не так. I думаю это может быть проблема, но я также задаюсь вопросом, есть ли у него что-нибудь делать с user_sessions?

Кроме того, это то, что мой application_controller выглядит следующим образом:

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 

Я сделал заглавной Администратор, чтобы отразить это:

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 

Если у вас есть какие-либо идеи, я бы очень признателен. Благодарю.

ответ

1

По-видимому, приложение правильно загружает правила таблицы ролей, но не загружает файл config/authorization_rules.rb правильно. Проверьте файл, его имя и используемый синтаксис.

Попробуйте использовать привилегии раздел в authorization_rules.rb; как это:

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 

А насчет контроллера компаний?


Удачи.

0

Я сделал заглавной Администратор, чтобы отразить, что

Что вы имеете в виду под этим? Роль администратора должна быть капитализирована в файле authorization_rules.rb, поскольку метод role_symbols, кажется, работает и возвращает [:Admin] как массив ролей пользователей. Вы можете видеть, что в журнале:

(roles [:Admin], privileges [:show], context :companies)

Это означает, что текущий пользователь имеет роли, указанные, но необходимо, по крайней мере один из перечисленных привилегий для доступа к контекстному/ресурсу. Таким образом, ваш authorization_rules.rb должен иметь капитализированную роль :Admin.

+0

Да, я видел, что последнее, что я перечислял, было authorization_rules и: Admin заглавны, так же как Роль находится в таблице Роли. Я просто не могу понять, где это происходит. – looloobs