Ruby on rails Rails4:限制控制器销毁操作
我在控制器中设置了我的当前_用户,因此用户不能编辑其他用户的条目 但我可以让它在摧毁行动中发挥作用 我唯一的解决办法是检查用户是否是实际的上传者,然后向他显示销毁链接Ruby on rails Rails4:限制控制器销毁操作,ruby-on-rails,controller,ruby-on-rails-4,Ruby On Rails,Controller,Ruby On Rails 4,我在控制器中设置了我的当前_用户,因此用户不能编辑其他用户的条目 但我可以让它在摧毁行动中发挥作用 我唯一的解决办法是检查用户是否是实际的上传者,然后向他显示销毁链接 <% if current_user == shop.user %> <td><%= link_to 'Destroy', shop, method: :delete, data: { confirm: 'Are you sure?' } %></td> <% end
<% if current_user == shop.user %>
<td><%= link_to 'Destroy', shop, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
但这不是一个坏习惯吗,因为有人可以很容易地破解它
如果有人能在这方面启发我。。。
谢谢:)您应该在视图中隐藏它,但也应该在控制器上控制它 在控制器中,您必须在执行操作之前执行类似于的操作(请在此处阅读:)您可以使用gem。一旦安装,CanCan将生成一个“能力”文件,您可以在其中定义用户可以做什么或不能做什么。例如,在您的情况下,您可能
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
然后在视图中,您可以进行简单的检查,查看用户是否有能力修改该对象。例如:
<% if can? :destroy, shop %>
<td><%= link_to 'Destroy', shop, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
@shop = Shop.find(params[:id])
authorize! :destroy, @shop
这是一个非常有用的宝石,并且有很好的文档记录另一种方法:
您可以使用单数resource()代替复数,而不是传递店铺id进行编辑、更新和销毁
routes.rb:
resources :shops, only: :show, :index
resource :shop, only: [:new, :create, edit, :update, :destroy]
您还需要在_action之前更改,以便它获取当前用户的店铺,而不是通过作为参数传递的id
进行查询:
def set_shop
@shop = current_user.shop
end
由于您不再使用web用户提供的id
获取要销毁/编辑的店铺,因此他无法使用假id进行自定义请求。我的控制器a中已经有了\u操作。->在执行以下操作之前:设置店铺,仅:[:显示,:编辑,:更新,:销毁]。。你能编辑你的答案吗?每个用户
都有一家商店
还是可以有多家商店
?这完全是另一个问题。我试图设置它,所以用户的将被限制为1,但没有得到它的工作。通常情况下,用户应该只有一家店铺。我以前曾尝试将用户限制在一家店铺内,但我花了数小时尝试,并将所有错误都纠正了。你能帮我吗?你介意和我一起聊天吗?->
def set_shop
@shop = current_user.shop
end