[英]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
作為說明,我使用的是 Rails 6.0.2.2; Rails 管理員 2.0.2; 康康康3.1.0; 而且我沒有使用間隙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.