ruby-on-rails - 在 CanCan 中通过多项操作进行授权

标签 ruby-on-rails authorization cancan

我试图更好地了解 CanCan 在授权方面的功能。想象一下这个 Controller Action :

def update
  if can? :action, Model or can? :resolve, Model or can? :authorize, AnotherModel
    # My Code here
    respond_with @model
  else
    raise CanCan::AccessDenied.new(nil, :update, Model)
  end
end

我在尝试使用 authorize! 找到上述问题的解决方案时遇到了这个问题。据我所知(同时查看签名)authorize! 只接受一个权限(操作)和一个主题,带有可选消息,如下所示:

def authorize!(action, subject, *args)
  # code
end

有没有一种我可能会忽略的方法来指示授权检查多个操作?将两个 authorize 一个接一个地作为权限之间的 AND 条件,我希望它像 OR 条件一样工作,基本上类似于上面的自定义代码(这有在 CanCan 中引发 AuthorizationNotPerformed 的问题,可以通过 skip_authorize_resource 避免,这不是我真正想做的事情)。

最佳答案

您可以创建一个 custom action并根据需要创建任意数量的 条件。

can :my_update_action, Project do |project|
  can?(:read, ModelX) || can?(:read, ModelY) || ... 
end

关于ruby-on-rails - 在 CanCan 中通过多项操作进行授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378239/

相关文章:

javascript - 如何在 Node JS 中使用 jwt 向所有用户授权不同的 token

ruby-on-rails - 设置 CanCan ability.rs 模型

ruby - cancan 能力定义语法 - 是否有更短的版本?

ruby-on-rails - Rails 控制台未加载

ruby-on-rails - 为什么我的 Rails 测试这么慢?

scala - Scala Play 2.4 推荐的授权框架

asp.net-mvc - 如何在 ASP.NET MVC 上进行授权重定向

ruby-on-rails - session 超时后,消息 "true"在主页上闪烁

ruby-on-rails - Ruby Gem Ultraviolet、Rails、Leopard

ruby-on-rails - ruby-on-rails 创建具有多个belongs_to和attr_accessible的模型