我刚刚安装了cancan,我遇到了一个快速的小问题。我应该可以使用if_can?应用操作隐藏链接。这样只有用户创建的信息当然可以查看编辑/删除链接。
我无法找到遇到同样问题的其他人。如果有人可以看看并帮助我,我将不胜感激。
show.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>
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
can :read, :all
end
end
答案 0 :(得分:1)
好的,每个控制器都必须经过授权。最简单的方法是从照片开始并确保无法删除它。你需要这样的东西:
can :delete, Photo do |photo|
question.try(:user) == user
end
在你的能力.rb。在照片的控制器中,您需要输入load_and_authorize_resource
或authorize_resource
。
然后在您的视图中,您希望<%if can :remove, photo %>
不是<%if can :remove, @photo>
。当你@photo
<for photo in @gallery.photos %>
似乎很奇怪
答案 1 :(得分: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%>
注意:在“&lt;%if can can?:update,photo%&gt;”中写“照片”而不是“照片”或“@photo”。因为这里的照片是可靠的,它会遍历循环。