如何在rails的用户索引中授予按用户编辑/销毁链接的权限?
我正在使用Rails3,Devise和CanCan来定义基于角色的能力。
我希望当前用户能够在用户索引页面中查看和访问用于编辑/删除其个人资料的链接。他们不应该能够为所有其他用户查看或访问这些链接。
我在索引视图中设置了以下内容:
<% if can? :update, @user %>
<%= link_to 'Edit', edit_user_registration_path(@user) %> |
<% end %>
在abilities.rb
def initialize(user)
can :update, User, :id => user.id
if user.role? :super_admin
can :manage, :all
end
end
我的superadmin可以查看和编辑索引中所有用户的链接。
我的用户可以看到没有人的链接,甚至连自己也看不到。
我阅读的越多,我就越困惑,设计,康康和用户模型都起到了作用。
我很欣赏我已经走上了正确的道路,并且非常感谢能够帮助我理解这一点的有用信息。
非常感谢
答案 0 :(得分:3)
在abilities.rb
can :manage, User do |u|
u.id == user.id
end
如果你想通过身份证。
你的观点对我来说很好。
答案 1 :(得分:2)
这是完全盲目的,但可能有效:
<% if can?(:update, @user) || @user==current_user %>
<%= link_to 'Edit', edit_user_registration_path(@user) %> |
<% end %>
将current_user
替换为当前登录用户的任何内容。
答案 2 :(得分:2)
试试这个,看它是否有效(如果你还有这个问题。)我不认为你的普通用户应该在if语句之外。(根据你的需要更改变量。)
def initialize(user)
user ||= User.new #guest user
if user.role? :super_admin
can :manage, :all
else
can :update, User, :id => user.id
can :read, :all # you can try it with this line removed at first
end
end
答案 3 :(得分:0)
你很困惑,这样,你让你变得更加困难 有一点你说,
我希望当前的用户能够 查看和访问链接 在用户中编辑/删除他们的个人资料 索引页面。他们不应该这样做 查看或访问所有人的这些链接 其他用户。
另一方面,
我的superadmin可以查看和编辑链接 对于索引中的所有用户。我的用户 可以看到没有人的链接,甚至没有 本身
我理解你想说的话。你想要:
需要考虑的一些要点:
您是否在Ability类中正确分配了能力?在代码中查找类似的内容,看看它是否在控制台中有效。
def current_ability
@current_ability ||= Ability.new(current_user)
end
如果是,请转到此部分:
can :manage, User do |user|
user == current_user #Assign the abilities for the user, here only,
# no need to match the id for each view in the link.
end
如果它仍然不起作用,请休息一段时间,再次浏览这些链接,我知道这可能会让人感到困惑,但请相信我你很亲密。
Wiki - Defining-Abilities
Wiki - Changing-Defaults
当你到达那里时,你想与我分享,你如何处理整个事情。我很乐意听取您的意见。