【问题标题】:RoR: CanCanCan authorize only user created itemsRoR:CanCanCan 仅授权用户创建的项目
【发布时间】:2015-08-06 17:03:26
【问题描述】:

这段代码有什么问题?一个普通用户仍然能够看到所有的关系,而他应该只看到他自己的。

我的查看代码:

<% if can? :read, Relato %>
  <td><%= relato.id %></td>
  <td><%= relato.cliente.name %></td>
  <td><%= relato.projeto.name %></td>
  <td><%= relato.local.logra %></td>
  <td><%= relato.time %></td>
  <td><%= relato.comment %></td>
<% end %>

我的Ability 班级:

can :manage, :all if user.role == "admin"

if user.role == "normal"
  can :read, Relato ,  :user_id => user.id 
  can :manage, Relato,  :user_id => user.id 
end

【问题讨论】:

  • 这段代码格式不佳,难以阅读,因此提供了帮助。
  • @BradWerth Mods 已批准编辑。代码现在更具可读性

标签: ruby-on-rails ruby cancancan


【解决方案1】:

您需要为特定实例授权用户:

<%= if can? :read, relato %>

当您尝试为整个类授权用户时,如上所述,CanCanCan 会忽略能力中定义的任何条件,因为它无法确定整个 Relato 模型的 user_id 字段;它只能对单个 relato 实例执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2018-10-17
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多