Cancancan-在Rails Admin中拒绝访问

问题描述 投票:0回答:1

我关注了CanCanCan的configuration instructions for Rails Admin。我收到以下错误消息:

RailsAdmin :: MainController#dashboard中的CanCan :: AccessDenied

您无权访问此页面。

提取的来源(围绕行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 

ability.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'

尽管其他地方的权限似乎都可以正常工作。用户有2种可能的角色:管理员或用户。在我的管理员帐户上,我被视为管理员,可以执行用户无法执行的操作。例如:

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

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

“编辑”选项仅针对创建该文章的用户或管理员显示。这按预期工作。

ruby-on-rails ruby-on-rails-6 cancancan
1个回答
0
投票

在config / initializers / 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

Thanks to philtr

作为说明,我正在使用Rails 6.0.2.2; Rails Admin 2.0.2; Cancancan 3.1.0;而且我没有使用间隙。

© www.soinside.com 2019 - 2024. All rights reserved.