我使用 Sorcery 和 Cancan 制作了一个简单的基于角色的身份验证,该数据库包含一个名为 ROLE 的列,在注册用户时可以是管理员或普通用户,
Relato 是一个脚手架,您可以在其中创建“报告”,我希望普通用户只能看到自己创建的那些,也可以做其他事情(更新、销毁)。
我的能力.rb
def initialize(user)
if user.role == 'admin'
can :manage, :all
elsif user.role == 'normal'
can :create, Relato
can :manage, Relato, :user_id => user.id
can [:read, :update, :destroy], User, :id => user.id
end
无需控制保护
在我看来 index.html.erb 它列出了我放的所有“报告”
<% if can? :index, Relato %>
<tbody>
<% @relatos.each do |relato| %>
<tr class="alt">
<td><%= relato.cliente.name %></td>
<td><%= relato.projeto.name %></td>
<td><%= relato.local_id %></td>
<td><%= relato.task_id %></td>
<td><%= relato.time %></td>
<td><%= relato.comment %></td>
<td><%= relato.isdoe %></td>
<td><%= link_to 'Editar', edit_relato_path(relato) %></td>
<td><%= link_to 'Deletar', relato, method: :delete, data: { confirm: 'Are you sure?' } %>
</tr>
<% end %>
<% end %>
但它不起作用,用户看不到他的报告,使用管理员帐户一切都很好。