2014-01-05 1 views
0

Использование rails_admin + cancan2 У меня есть проблема со способностью. в соответствии с официальной документацией https://github.com/sferik/rails_admin/wiki/CanCan я настроил мой ability.rb файл:rails_admin + cancan2 несанкционированный доступ на приборной панели

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    can :read, :all 

    if user 
     if user.has_role? :admin 
     can :access, :all 
     end 
     if user.has_role? :manager 
     can :access, :rails_admin # grant access to rails_admin 
     can :dashboard    # grant access to the dashboard 
     end 
    end 
    end 
end 

проблема использование канкан версии 1.6 работает нормально, но с использованием канкана 2 «управленцем» несанкционированно доступ в приборной панели, но он имеет право на доступ к администратору rails. Итак:

can :access, :rails_admin #work 
can :dashboard  #don't work 

если я иду в локальном хосте: 3000/админ ошибка классический

CanCan::Unauthorized in RailsAdmin::MainController#dashboard 

, но если я иду локальный: 3000/администратора/модели она работает, так что

can :dashboard  #don't work 

не работает

Вы можете мне помочь?

+0

являются все действия контроллера панели успокоительное? – Austio

+0

i dpn't знаю, как я могу его открыть? – user1066183

+0

Все нормально, как: index,: show,: create или есть другие действия в контроллере, которые вы пытаетесь сделать? – Austio

ответ

3
can :dashboard, :all 

должно работать.

После отображения приборной панели, вам нужен еще один патч для работы с канкан 2.0

# patch for CanCan 2.0 
module RailsAdmin 
    module Extensions 
    module CanCan 
     class AuthorizationAdapter 
     def authorize(action, abstract_model = nil, model_object = nil) 
      @controller.current_ability.authorize!(action, model_object || abstract_model && model_name(abstract_model.model)) if action 
     end 
     def authorized?(action, abstract_model = nil, model_object = nil) 
      @controller.current_ability.can?(action, model_object || abstract_model && model_name(abstract_model.model)) if action 
     end 
     private 
     def model_name(model) 
      model.to_s.underscore.pluralize.to_sym 
     end 
     end 
    end 
    end 
end 
0

Я никогда не видел что-то вроде

can :dashboard 

Нормальная структура директива может это «может: действие,: объект» (или класс)

Итак, от того, что я понял из вашего вопрос, я полагаю, вы должны изменить это в

can :manage, :dashboard 

, если вы хотите назначить «все права»

+0

Я нашел can: dashboard официальные документы. Я никогда не видел этот синтаксис, но он работает с cancan1.6 – user1066183

+0

Я действительно вижу это в документе rails_admin. Наверное, это опечатка. Я бы изменил его в can: access,: dashboard. Звучит наиболее логично. И, может быть, в предыдущей версии это работало ... – Danny

+0

, прежде чем спрашивать на этом форуме, я только что попытался использовать: доступ и управление, но он не работает – user1066183

 Смежные вопросы

  • Нет связанных вопросов^_^