我目前正在尝试将inherited_resources 和权限集成到我的Rails 应用程序中。
对于检查基于资源执行控制器操作的能力的最佳位置,我有点卡住了。此代码作为权威示例给出:
def edit
@llama = Llama.find(params[:id])
authorize_action_for(@llama) # Check to see if you're allowed to edit this llama. failure == SecurityViolation
end
def update
@llama = Llama.find(params[:id])
authorize_action_for(@llama) # Check to see if you're allowed to edit this llama.
@llama.attributes = params[:llama] # Don't save the attributes before authorizing
authorize_action_for(@llama) # Check again, to see if the changes are allowed.
if @llama.save?
# etc
end
因为在inherited_resources 中,查找器被抽象掉了,我认为最好也将authorise_action_for
检查附加到这些抽象的查找器上。
在更新(可能是创建)的情况下,请注意权威的双重检查。