编辑和删除功能仅适用于已登录的用户

时间:2019-04-23 16:29:07

标签: ruby-on-rails ruby

我正在尝试使用rails中的current_user帮助程序标记,以便允许登录状态下的用户编辑和删除他们在登录时创建的对象。

上周这似乎对我有用,但是现在我回到了我的应用程序,并且它停止了。我还在显示页面上为编辑功能实现了相同的功能,但是它不起作用。请有人告诉我我要去哪里哪里了,我是否有正确的语法可以使用此功能?预先谢谢你:)

我的index.html.erb文件:

 <div class="row justify-content-around p-3">
  <% @hairstyles.each do |hairstyle| %>
    <div class="card m-3">
      <div>
      <%= cl_image_tag hairstyle.photo, width: 300, height: 200, crop: :fill, class: 'card-image'%>
      </div>
      <div class="card-body">
        <div class="card2">
          <div class="card-body-inner1 transbox">
            <h5 class="card-title"><%= link_to hairstyle.name, hairstyle_path(hairstyle) %></h5>
            <p>Location: <%= hairstyle.location%></p>
          </div>

          <div class ="card-body-inner2 d-flex">
            <p> Likes</p>
            <p> Share</p>

          <% if hairstyle.user == current_user%>
           <p> <%= link_to "Delete", hairstyle_path(hairstyle), method: :delete, data: { confirm: "Are you sure?" }%></p>
          <%end %>
          </div>         
      </div>


      </div>
    </div>
  <% end %>
</div>

我的控制器:

def create
    @hairstyle = Hairstyle.create(hairstyle_params)
    # @hairstyle.save ? (redirect_to hairstyle_path(@hairstyle)):(render 'new')
    @hairstyle.user = current_user
    if @hairstyle.save!
      redirect_to hairstyle_path(@hairstyle)
    else
      render 'new'
    end
  end

3 个答案:

答案 0 :(得分:1)

您能否指定停止工作的意思?也许您当前未登录?

为此功能,您还应该使用授权工具,例如pundit。因为现在,您只是在视图中隐藏指向动作的相应链接。但是,如果用户猜测该URL并在浏览器中键入该URL,他们仍然可以删除或编辑其他用户对象。 Pundit的政策概念正是在避免这种情况。

答案 1 :(得分:0)

提示您的代码,使用cancancan gem干燥代码,还有助于集中“安全访问权限”

答案 2 :(得分:0)

根据您的问题,我建议您使用action_access,它易于实现,并且易于为您拥有的每个用户分配编辑,删除或更新的权限。 链接:https://github.com/matiasgagliano/action_access