如何在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
你自己也很困惑,而这样做只会让你自己更加困惑。
你说,
另一方面,我希望当前用户能够查看并访问到的链接在用户中编辑/删除他们的配置文件索引页面。他们不应该有这种能力查看或访问这些链接其他用户。
我明白你想说什么。你想要的:我的超级管理员可以看到和编辑链接对于索引中的所有用户。我的用户可以为任何人看到链接,甚至没有自己
- SuperAdmin可以看到所有的链接,而
- 用户只能看到自己的链接,而不是其他人,也只有编辑和更新个人资料,甚至你可以添加删除帐户链接。但主要的问题是,用户只能在他/她的个人资料上看到链接,而在其他地方看不到。
需要考虑的几点:
你在能力课上是否正确分配了能力?在您的代码中查找类似的内容,并查看它是否在控制台中工作。
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
当你到了那里,你愿意和我分享一下你是如何完成整个事情的方法吗?