允许用户仅从索引编辑/销毁自己的配置文件

如何在rails的用户索引中授予按用户编辑/销毁链接的权限?

我正在使用Rails3,Devise和CanCan来定义基于角色的能力。

我希望当前用户能够在用户索引页面中查看和访问用于编辑/删除其个人资料的链接。 他们不应该能够为所有其他用户查看或访问这些链接。

我在索引视图中设置了以下内容:

  |  

并在abilities.rb

 def initialize(user) can :update, User, :id => user.id if user.role? :super_admin can :manage, :all end end 

我的superadmin可以查看和编辑索引中所有用户的链接。

我的用户可以看到没有人的链接,甚至连自己都没有。

我读到的越多,我就越困惑,设计,康康和用户模型都起到了作用。

我很欣赏我已经走上了正确的道路,并且非常感谢能够帮助我理解这一点的有用信息。

非常感谢

在abilities.rb

 can :manage, User do |u| u.id == user.id end 

如果你想通过身份证去。

你的观点对我很好。

这是完全盲目的,但也许它有效:

 <% if can?(:update, @user) || @user==current_user %> <%= link_to 'Edit', edit_user_registration_path(@user) %> | <% end %> 

current_user替换为当前登录用户的任何内容。

试试这个,看它是否有效(如果你还有这个问题。)我不认为你的常规用户应该在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 

你自己很困惑,这样,你让你变得更加困难。
有一点你说,

我希望当前用户能够在用户索引页面中查看和访问用于编辑/删除其个人资料的链接。 他们不应该能够为所有其他用户查看或访问这些链接。

另一方面,

我的superadmin可以查看和编辑索引中所有用户的链接。 我的用户可以看到没有人的链接,甚至连自己都没有

我理解你想说的话。 你要:

  1. SuperAdmin可以查看所有链接,以及
  2. 用户只能看到自己的链接,而不能看到任何其他人,也只能看到编辑和更新配置文件,甚至可以添加删除帐户链接。 但主要担心的是用户只能看到他/她的个人资料中的链接,而不能看到其他地方的链接。

要考虑的一些要点:

您是否在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 

如果它仍然无法工作,请rest一段时间,再次浏览这些链接,我知道这可能会让人感到困惑,但请相信我你很亲密。

维基 – 定义能力
维基 – 改变默认值

当你到达那里时,你想与我分享,你如何处理整个事情。 我很乐意听到你的消息。