Cancancan检查提交的参数

时间:2015-10-29 06:55:19

标签: ruby-on-rails-4 cancancan

如何让cancancan检查参数以查看用户是否可以更新?

控制器获取:

Parameters: {"offer"=>{"revoked"=>"1", "user_id"=>"14"}, "id"=>"53"}

ability.rb:

can :update, Controller, :user_id => user.id
cannot :update, Controller, { :revoked => nil }   

控制器代码:

@offer.update(params)

这给我一个Cancancan错误,说明用户未获得授权。我想我需要指定:revoked在offer hash中,但是我无法找到正确的代码。

1 个答案:

答案 0 :(得分:2)

如何更改Ability类可以访问的内容:

https://github.com/ryanb/cancan/wiki/Accessing-Request-Data

或者如何将params更专门地传递给Ability类:

https://stackoverflow.com/a/9472881/4880924

# CanCan - pass params in to Ability
# https://github.com/ryanb/cancan/issues/133
def current_ability
    @current_ability ||= Ability.new(current_user, params)
end

然后,只需访问参数的相关部分并检查它是否通过。