我试图更好地理解CanCan在授权方面的功能。想象一下这样的控制器操作:可在CanCan中执行多个操作授权
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
有没有我可以俯瞰的方式指示授权检查多个操作?把两个授权一个接一个地作为AND
条件之间的权限,我想它是像OR
条件工作,基本上类似于上面的自定义代码(这有问题在CanCan中提高AuthorizationNotPerformed
,可以避免与这不是我真正想做的事情)。
好的,但是你可以用循环和能力文件中的一些条件(使用自定义动作)构建相同的东西。而且你可以重复使用这些自定义操作,从而产生更简洁的代码库。那么无论你为什么工作;) – spas