【问题标题】:Cancan doesn't always show authorized linkCancan 并不总是显示授权链接
【发布时间】:2010-12-05 00:58:13
【问题描述】:

我正在使用 Cancan 来控制 User 功能,并且最近遇到了一个奇怪的问题:我的部分有一个“破坏”超链接,它有时只对授权用户显示。当我刷新页面时,不知道链接是否存在。

我在Ability.rb 中为我的Event 模型定义了能力,方法如下:

can [:create, :update, :destroy], Event do |event|
    user.regattas(true).include?(event.regatta)
end

我使用regattas(true) 来防止系统使用缓存的关联,以防最近发生了变化。

在我的 rspec 测试中,这对当前用户非常有效,无论是在我的 Ability.rb 测试和我的 EventsController 测试中。

这里是破坏。销毁我的_event.html.erb部分中的超链接,我只想在用户有能力销毁event时出现:

<% if can? :destroy, event %>
  <td><%= link_to 'Destroy', event, :confirm => 'Are you sure?', :method => :delete %></td>
<% end %>

关于如何修复闪烁并让授权用户始终显示“销毁”链接的任何建议?有没有其他人遇到过这个问题?

更多背景:我对另一段代码没有这个问题,不是部分代码,如下所示:

<% if can? :update, @regatta %>
    <%= link_to 'Edit Regatta Info', edit_regatta_path(@regatta) %> |
<% end %>

谢谢大家。

【问题讨论】:

    标签: ruby-on-rails authentication cancan


    【解决方案1】:

    Ryan Bates 实际上在 cancan github issue 上为我回答了这个问题。看起来 Cancan 使用 default_scope 的模型存在已知问题,记录在 on this ticket。就我而言,event.rb 包括对default_scope 的调用。去掉这条线完全解决了这个问题。

    the second ticket 上的讨论表明这是 Ruby on Rails 的问题,正如lighthouse ticket 中所讨论的那样。

    希望这可以帮助其他人解决这个奇怪的问题!谢谢,瑞恩...如果你碰巧在这个帖子上发帖,我会把答案转给你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多