【问题标题】:Rails CanCan only show data that user createdRails 只能显示用户创建的数据
【发布时间】:2013-07-04 06:40:49
【问题描述】:

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

我已经在 CanCan 上看过 Ryan Bate 的 screencast 3 遍了,但似乎只是针对不同的角色进行设置,而不是根据作者来限制内容。

CanCan 如何解决这个问题?

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

我在那个方法里面试过这个:

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

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

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

【问题讨论】:

  • 我想你想引用 current_user 那里

标签: ruby-on-rails ruby-on-rails-3 devise cancan


【解决方案1】:

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

@clients = current_user.clients

【讨论】:

  • 呃,我知道它不应该那么复杂。用你的方法让它工作。基于我关于身份验证的问题,什么会阻止用户说 /clients/6 并查看和编辑(甚至删除)其他用户创建的客户端?这就是CanCan进来的地方吗?或者 Devise 也有这种能力?
【解决方案2】:

试试这个

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

来自cancan wiki

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多