簡體   English   中英

Cancancan - 在 Rails Admin 中訪問被拒絕

[英]Cancancan - Access denied in Rails Admin

我遵循了 CanCanCan 的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

能力.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 %>

“編輯”選項僅對創建文章的用戶或管理員顯示。 這按預期工作。

在 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

感謝 philtr

作為說明,我使用的是 Rails 6.0.2.2; Rails 管理員 2.0.2; 康康康3.1.0; 而且我沒有使用間隙。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM