【问题标题】:Cancancan ActiveAdmin: skip authorization for :createCancancan ActiveAdmin:跳过对 :create 的授权
【发布时间】:2018-07-29 06:19:15
【问题描述】:

我在 ActiveAdmin 中使用 Cancancan 进行授权。 除了 :create 一切正常。创建新管理员时,cancancan 会检查 admin_user.id = id。但是,ActiveAdmin 使 id = nil,所以我无法创建新管理员。

  include CanCan::Ability

  def initialize(admin_user)
    can :manage, AdminUser, id: admin_user.id
    ....

  end
end 

我的解决方案是每个人都可以跳过创建授权。 我的应用程序控制器:

class ApplicationController < ActionController::Base
  load_and_authorize_resource 
  skip_authorize_resource :only => :new  
end 

但它什么也没做。请帮忙!

【问题讨论】:

  • 每个人都可以跳过创建授权所以每个人都可以创建管理员?如果每个人都可以创建管理员,管理员的目的是什么?
  • 还有new 不是create 这是两个不同的动作。
  • 在我的项目中,admin 被视为普通用户。对困惑感到抱歉。我尝试了“新”和“创建”,但没有任何效果。
  • 那么您希望谁能够创建管理员用户?
  • 是的,在我的项目中,现在只有一种类型的用户(管理员),我希望每个人都可以创建他们想要的任何东西。 (创建新管理员,创建新帖子,..)

标签: ruby-on-rails ruby activeadmin cancancan


【解决方案1】:

您可以像这样指定哪些操作需要授权...

def initialize(admin_user)
  can [:edit, :destroy], AdminUser, id: admin_user.id
end

只需使用您需要该授权的任何操作替换/添加到[:edit, :destroy]

如果您希望所有管理员用户都能够对 AdminUser 执行操作...

can :some_action, AdminUser

【讨论】:

  • 非常感谢!你救了我的一天!我从来没有想过要结合这两种能力。祝你早日/晚安!
  • 没问题,很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多