ruby on rails——允许用户只从索引中编辑/销毁自己的配置文件



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

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

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

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

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

和在能力。rb

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

我的超级管理员可以看到和编辑索引中所有用户的链接。

我的用户不能看到任何人的链接,甚至不能看到自己的链接。

我读得越多,我就越困惑,因为设计、cancan和用户模型都在发挥作用。

我希望你能确认一下我的思路是否正确,如果你能给我一些有用的信息,帮助我理解这个问题,我将不胜感激。

多谢

In capabilities .rb

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

如果你想通过ID。

我看你的风景不错。

这是一个完全的盲射,但也许它有效:

<% 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

你自己也很困惑,而这样做只会让你自己更加困惑。
你说,

我希望当前用户能够查看并访问到的链接在用户中编辑/删除他们的配置文件索引页面。他们不应该有这种能力查看或访问这些链接其他用户。

另一方面,

我的超级管理员可以看到和编辑链接对于索引中的所有用户。我的用户可以为任何人看到链接,甚至没有自己

我明白你想说什么。你想要的:
  1. SuperAdmin可以看到所有的链接,而
  2. 用户只能看到自己的链接,而不是其他人,也只有编辑和更新个人资料,甚至你可以添加删除帐户链接。但主要的问题是,用户只能在他/她的个人资料上看到链接,而在其他地方看不到。

需要考虑的几点:

你在能力课上是否正确分配了能力?在您的代码中查找类似的内容,并查看它是否在控制台中工作。

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 - definition - capabilities

当你到了那里,你愿意和我分享一下你是如何完成整个事情的方法吗?

相关内容

  • 没有找到相关文章

最新更新