1

我刚刚安装了 cancan,我遇到了一个快速的小问题。我应该可以使用 if_can 吗?应用操作来隐藏链接。只有用户创建的信息才能查看编辑/删除链接。

我一直无法找到遇到同样问题的其他人。如果有人可以看看并帮助我,将不胜感激。

显示.html:

<div id="photos">
    <% for photo in @gallery.photos %>
    <div class="photo">
        <%= image_tag photo.image_url(:thumb).to_s %>
        <div class="name"><%= photo.name %></div>
        <div class="actions">
            <% if can? :update, @photo %>
            <%= link_to "edit", edit_photo_path(photo) %> |
            <% end %>
            <% if can? :remove, @photo %>
            <%= link_to "remove", photo, :confirm => 'Are you sure?', :method => :delete %>
            <% end %>
        </div>
      </div>
    <% end %>
    <div class="clear"></div>
</div>

<p>
  <%= link_to "Add a Photo", new_photo_path(:gallery_id => @gallery) %>
|
  <%= link_to "Remove Gallery", @gallery, :confirm => 'Are you sure?', :method => :delete %> |
  <%= link_to "View Galleries", galleries_path %>
</p>

能力.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can :read, :all 
  end
end
4

2 回答 2

1

好的,每个控制器都必须经过授权。最简单的方法是从照片开始并确保它不能被删除。您将需要类似的东西:

can :delete, Photo do |photo|
  question.try(:user) == user
end   

在你的能力.rb。在照片的控制器中,您需要输入load_and_authorize_resourceauthorize_resource

那么在你看来你<%if can :remove, photo %>不想<%if can :remove, @photo>@photo对我来说,您尝试使用它似乎很奇怪<for photo in @gallery.photos %>

于 2013-03-07T16:29:16.820 回答
0

我也经历过这个问题。解决方案很简单,在 Ability.rb 类中执行如下操作

class Ability
  include CanCan::Ability

  def initialize(user)
  user ||= User.new # guest user (not logged in)
  if user.role == "admin"
    can :update, Photo, :user_id => user.id
  end 
end 

然后在 index.html.erb 中执行以下操作

<% @photos.each do |photo| %>
 <%if can? :update, photo %>
  <!-- hide your links and buttons here-->
 <%end%>
<%end%>

注意:在“<%if can? :update, photo %>”中写“photo”而不是“Photo”或“@photo”。因为这里的照片是一个可验证的,它将遍历整个循环。

于 2013-05-29T11:21:06.303 回答