【问题标题】:cancancan auth in the view视图中的 cancancan 身份验证
【发布时间】:2018-04-04 08:04:28
【问题描述】:

我在我的应用程序中添加了 cancancan 以进行授权,我可以克服障碍。

我有一个投票系统,你不能对自己的条目投票,但你可以编辑、删除等。

所以我在技能类中创建了一个方块。

def initialize(user)
  if user.present?
    if user.admin?
      can :manage, :all

    else
      can :vote, Entry do |entry|
        user.id != entry.user_id
      end
      can :manage, Entry, user_id: user.id
      can :manage, Message, user_id: user.id
      can :manage, Profile, user_id: user.id
      can :manage, User, user_id: user.id

    end

   can :read, :all

  end
 end

这是我打电话给罐头的地方吗?方法:

<% @entries.each do |x| %>

 <% if can? :vote, x %>
  <span class="text-green"> <%= link_to like_entry_path(x), method: :put, remote: true do %>
    <i class="fas fa-chevron-up"></i>
  <% end %>
  </span>
  <span class="badge" id="upvote-count<%=x.id%>"><%= x.get_upvotes.size%></span>
  <span class="text-red"> <%= link_to unlike_entry_path(x), method: :put, remote: true do %>
    <i class="fas fa-chevron-down"></i>
  <% end %>
  </span>
  <span class="badge" id="downvote-count<%=x.id%>"><%= x.get_downvotes.size%></span>
 <% else %>
  <i class="fas fa-chevron-up text-grey"></i>
  <span class="badge"><%= x.get_upvotes.size%></span>
  <i class="fas fa-chevron-down text-grey"></i>
  <span class="badge"><%= x.get_downvotes.size%></span>
 <% end %>
<% end %>

但它仍然打印不应该的链接?

调试时,在第一个条目上,我检查user.id != entry.user_id,它返回为假,因此我可以对其进行投票,但在第二个循环中,相同的查询返回为真,但链接仍然出现在视图中?

总结一下,如果这有点令人困惑,两个不同帐户的两个条目,但投票链接出现在两个条目上。

【问题讨论】:

  • 如果你在技能文件中交换can :manage, Entrycan :vote, Entry会怎样?
  • 你有没有先检查你的用户和入口用户id在数据库中是否正确?
  • @Thrasher 是的,我检查了数据库,
  • @apneadiving 不幸的是没有区别
  • 您的用户是管理员吗?

标签: ruby-on-rails cancan cancancan


【解决方案1】:

这样定义能力:

cannot :vote, Entry if  user_id: user.id 

文档:Defining-Abilities-with-Blocks#only-for-object-attributes

【讨论】:

  • 不是投票链接在不应该显示的时候显示,所以 cancan 功能由于某种原因不起作用
  • 你知道我认为那是什么吗,我只是要在网站上进行更多测试!,你救了我,我简直要彻底卸载 cancancan 了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2017-04-17
  • 1970-01-01
  • 2018-06-02
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多