2016-06-08 5 views
0

Когда я пытаюсь перейти к/admin. Cancancan вызывает исключение, если пользователь не вошел в систему, и если вошел пользователь, не являющийся администратором. Я хотел бы перенаправляться на экран входа в систему - если вход в систему завершен успешно, перейдите на панель управления rails_admin.Rails_admin, cancancan для авторизации, для аутентификации. Войти в Redirect?

Смотрите ниже, мой теперешний код/​​конфигурации, пожалуйста, дайте мне знать, если вам нужно больше информации:

/app/models/ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # guest user (not logged in) 
    if user && user.admin? 
     can :access, :rails_admin  # only allow admin users to access Rails Admin 
     can :dashboard 
     can :manage, :all 
    else 
     can :read, :all     # allow everyone to read everything 
    end 

    end 
end 

/config/initializers/rails_admin.rb

RailsAdmin.config do |config| 

    ### Popular gems integration 

    # == Devise == 
    # config.authenticate_with do 
    # warden.authenticate! scope: :user 
    # end 
    # config.current_user_method(&:current_user) 

    # == Cancan == 
    config.authorize_with :cancan 

    ## == Pundit == 
    # config.authorize_with :pundit 

    ## == PaperTrail == 
    # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 

    ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration 

    config.actions do 
    dashboard      # mandatory 
    index       # mandatory 
    new 
    export 
    bulk_delete 
    show 
    edit 
    delete 
    show_in_app 

    ## With an audit adapter, you can add: 
    # history_index 
    # history_show 
    end 

    config.model 'User' do 
    create do 
     field :name 
     field :email 
     field :password 
     field :password_confirmation 
     field :role 
    end 

    edit do 
     field :name 
     field :email 
     field :password 
     field :password_confirmation 
     field :role 
    end 
    end 


end 

/config/routes.rb

Rails.application.routes.draw do 
    mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 
    # authenticate :admin do 
    # mount RailsAdmin::Engine => '/admin', as: :rails_admin 
    # end 

    root to: 'visitors#index' 
    devise_for :users 
    resources :users 

    devise_scope :user do 
    get "signup", to: "devise/registrations#new" 
    get "login", to: "devise/sessions#new" 
    get "logout", to: "devise/sessions#destroy", as: 'logout' 
    end 
end 

ответ

0

Похоже, вы ищете спасение из CanCan :: AccessDenied Exception.

rescue_from CanCan::AccessDenied do |exception| 
    redirect_to login_path, :alert => exception.message 
end 

Заменить login_path с реальным именем пути вашего входа в систему. Вы найдете его, выполнив rake routes и найдя запись, указывающую на

Вы также можете сделать логику более надежной и перенаправлять только в том случае, если они пытаются посетить страницу в области администратора.

+0

его ** не ** ловить в 'rails-5-api' для' rails_admin' в '/ admin' –

0

У меня была схожая ситуация, и я смог перенаправить администратора на корневой путь. Я использую Rails 5 и Ruby 2.3 Вот мои настройки:

администратора рельсы

# config/initialize/rails_admin.rb 
    config.authorize_with do 
    unless current_user.try(:admin?) 
     flash[:error] = "You are not authorize to access this page!" 
     redirect_to main_app.root_path 
    end 
    end 

CanCanCan

# models/ability.rb 
    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    can :manage, :all if user.role == "user" 
    end 

Когда пользователь пытается получить доступ к /admin он получает перенаправление на корневой путь с ошибкой вспышки.

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

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