允许用户仅从索引编辑/销毁自己的配置文件
如何在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可以查看和编辑索引中所有用户的链接。 我的用户可以看到没有人的链接,甚至连自己都没有
我理解你想说的话。 你要:
- 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
如果它仍然无法工作,请rest一段时间,再次浏览这些链接,我知道这可能会让人感到困惑,但请相信我你很亲密。
维基 – 定义能力
维基 – 改变默认值
当你到达那里时,你想与我分享,你如何处理整个事情。 我很乐意听到你的消息。