Cancancan - доступ запрещен в Rails Admin - PullRequest
0 голосов
/ 30 апреля 2020

Я следовал инструкциям CanCanCan для Rails Admin . Я получаю сообщение об ошибке ниже:

CanCan :: AccessDenied в RailsAdmin :: MainController # dashboard

У вас нет прав доступа к этой странице.

Извлеченный источник (вокруг строки # 180):

178      if cannot?(action, subject, *args)
179        message ||= unauthorized_message(action, subject)
180        raise AccessDenied.new(message, action, subject, args)
181      end
182      subject
183    end 

able.rb:

class Ability
  include CanCan::Ability


  def initialize(user)
    user ||= User.new # guest user (not logged in)
    can :read, :all
    can :manage, Article, user_id: user.id
    return unless user.admin_role?
    can :access, :rails_admin
    can :read, :dashboard
    can :manage, :all
  end
end

rails_admin.rb:

RailsAdmin.config do |config|
  ## == CancanCan ==
  config.authorize_with :cancancan

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

Gemfile включает в себя:

gem 'cancancan'
gem 'rails_admin', '~> 2.0', '>= 2.0.2'

Разрешения, кажется, работают нормально везде, хотя. Для пользователя есть две возможные роли: администратор или пользователь. В моей учетной записи администратора я признан администратором и могу делать то, что пользователи не могут. Например:

app / views / article / index. html .erb:

<% if can? :update, article %><td><%= link_to 'Edit', edit_article_path(article) %></td> <% end %>

Параметр «Изменить» отображается только для пользователя, который создал статью ИЛИ администратора , Это работает как ожидалось.

1 Ответ

0 голосов
/ 01 мая 2020

В config / initializer / rails_admin.rb удаление config.authorize_with :cancancan и добавление приведенного ниже кода, похоже, решило проблему. Пользователи с admin_role могут посетить / admin, но другие не могут. Я до сих пор не уверен, почему cancancan не играл хорошо, однако теперь он работает как положено.

rails_admin.rb:

#config.authorize_with :cancancan

  config.parent_controller = "::ApplicationController"

  config.authorize_with do
    if !current_user || !current_user.admin_role?
      redirect_to(main_app.root_path, alert: "You are not permitted to view this page")
    end
  end

Благодаря philtr

В качестве заметки я использую Rails 6.0.2.2; Rails Admin 2.0.2; Канканкан 3.1.0; и я не использую оформление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...