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

时间:2011-04-29 11:01:38

标签: ruby-on-rails devise cancan ruby-on-rails-3

如何在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可以查看和编辑索引中所有用户的链接。

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

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

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

非常感谢

4 个答案:

答案 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可以查看和编辑链接   对于索引中的所有用户。我的用户   可以看到没有人的链接,甚至没有   本身

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

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

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

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