我试图更好地了解 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/