如何使用 cancan 阻止用户编辑其他用户的个人资料?

发布于 2024-11-15 00:41:50 字数 584 浏览 4 评论 0原文

如何设置允许用户仅编辑自己的个人资料的能力?编辑链接放置在他们自己的显示页面中,如下所示:

<% if can? :update, User %>
  <div class="button">
    <%= link_to 'edit my profile', edit_user_path(@user) %>
  </div>
<% end %>

目前的功能如下所示:

if user.role == "author"
  can :create, Review
  can :update, Review do |review|
    review.try(:user) == user
  end
  can :update, User, :id => user.id
end

我在用户控制器中也有 load_and_authorize_resource 。

但这不起作用,用户(具有作者角色)仍然可以在所有用户显示页面上看到并使用编辑按钮。

我在这里做错了什么?

非常感谢您的帮助,非常感谢!

How can I set an ability to allow a user to only edit their own profile? The edit link is placed in their own show page like so:

<% if can? :update, User %>
  <div class="button">
    <%= link_to 'edit my profile', edit_user_path(@user) %>
  </div>
<% end %>

The ability currently looks like this:

if user.role == "author"
  can :create, Review
  can :update, Review do |review|
    review.try(:user) == user
  end
  can :update, User, :id => user.id
end

I have load_and_authorize_resource in the user controller too.

But this doesn't work, the user (with role of author) can still see and use the edit button on all users show pages.

What am I doing wrong here?

Thanks very much for any help its much appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨曦慕雪 2024-11-22 00:41:50

应该是:

<% if can? :update, @user %>

您需要传递实际的对象实例而不是类。

Should be:

<% if can? :update, @user %>

You need to pass the actual object instance instead of the class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文