【问题标题】:How to restrict edit action to only current user如何将编辑操作限制为仅当前用户
【发布时间】:2015-08-17 04:11:03
【问题描述】:

如何使用户编辑操作仅在用户是当前用户时才可用?我正在使用设计。

设计有这个:

before_action :authenticate_user!, only: [:new, :edit, :update, :destroy], notice: 'you must sign in first!'

但是,如果用户等于当前用户,那么所有这些都是确保用户登录而不是?我想确保其他用户无法编辑其他用户的帐户。

最好的方法是什么?我应该创建一个新的before_filter 吗?我找不到任何标准方法。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 model-view-controller devise


    【解决方案1】:

    您可以使用devise提供的current_user方法。在这里你可以阅读更多 -current_user method

    def edit
      unless current_user 
        redirect_to home_path, :alert => "Restricted area" 
      end
    end
    

    【讨论】:

      【解决方案2】:

      我强烈建议研究 CanCanCan gem 来处理这些事情。在这种情况下,您的代码将类似于:

      查看:

      <% if user_signed_in? %>
        <% if can? :update, @user %>
          # Edit something 
          <%= link_to edit_profile_path(@user), class: 'user' do %>
            Edit your profile
          <% end %>
        <% end %>
      <% end %>
      

      在您的用户控制器或类似控制器中,您将添加以下行,以处理用户手动向浏览器键入 url 的情况:

      控制器:

      class UsersController < ApplicationController
         load_and_authorize_resource
         ...
      

      更多信息和文档:https://github.com/CanCanCommunity/cancancan

      【讨论】:

      • 这不会阻止某人手动输入网址,它只会阻止显示链接。这就是我要解决的问题。
      • 确实如此。使用 CanCanCan,您将把它放在您的用户控制器之上:“load_and_authorize_resource”,如果他们手动在浏览器中键入不属于他们的资源(即他们自己的配置文件),他们将被重定向到您选择的页面。
      • 请更新您的答案。视图中的代码和控制器中的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2013-07-28
      • 2011-07-07
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多