0

我正在使用 Devise 注册帐户和登录/注销。我要添加的下一个功能是仅显示为给定用户输入的数据。例如,如果我创建一个新的“东西”(在我的例子中是一个客户端,位于 /clients/new),我只希望创建该东西的人能够查看它。现在,如果我登录并创建一个新客户端,然后注销并以其他用户身份重新登录,我可以看到我以其他用户身份创建的客户端。这应该受到限制,以便作者是唯一可以读取、更新和销毁自己的客户端的人。

我已经在 CanCan 上观看了 Ryan Bate 的截屏视频3 次,但似乎只是针对不同的角色进行设置,而不是根据作者限制内容。

我该如何使用 CanCan 来解决这个问题?

我的 current除了一个空方法ability.rb之外什么都没有。initialize(user)

我在那个方法中试过这个:

can :update, Client do |client|
    client.try(:user) == user
end

<% if can? :update, @client %> ... <% end %>

围绕在索引视图中显示客户端的循环,但无济于事。

4

2 回答 2

1

我认为使用 CanCan 过滤结果不是最佳解决方案。如果用户 'has_many' 客户端,那么在您的控制器方法中只需查询用户的客户端:

@clients = current_user.clients
于 2013-07-04T09:29:33.817 回答
0

试试这个

def initialize(user)
  can :update, Client, :user_id => user.id
end

来自康康维基

于 2013-07-04T07:19:55.490 回答