Ich habe diese Ansicht, die alle Pops auflistet, nur es hängt vom Benutzer ab, es sollte nicht alles erscheinen, also benutzte ich den cancancan, um zu filtern, aber es funktioniert nicht mehr .Der Index listet alles auf, cancancan filtert nicht
meiner Sicht (POPs/index.html.erb):
<% if @pops.present? %>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Titulo</th>
<th colspan="4"></th>
</tr>
</thead>
<% @pops.each do |pop| %>
<tbody>
<tr>
<% if can? :index, Pop %>
<td scope="row"><%= pop.title %></td>
<% end %>
<% if can? :show, Pop %>
<td><%= link_to 'Mostrar', pop %></td>
<% end %>
<% if can? :edit, Pop %>
<td><%= link_to 'Editar', edit_pop_path(pop) %></td>
<% end %>
<% if can? :delete, Pop %>
<td><%= link_to 'Excluir', pop, method: :delete %></td>
<% end %>
<% if can? :index_pdf, Pop %>
<td><%= link_to 'Exportar', index_pdf_path(pop) %></td>
<% end %>
</tr>
</tbody>
<% end %>
</table>
<% end %>
mein Modell
class Pop < ApplicationRecord
enum charge: {
Auxiliar: 1,
Analista: 2,
Coordenador: 3,
Supervisor: 4,
Gerente: 5,
Diretor: 6
}
enum status: {
active: 0,
inactive: 1
}
has_many :pop_groups
has_many :groups, :through => :pop_groups, :dependent => :destroy
end
meine Fähigkeit
class Ability
include CanCan::Ability
def initialize(user)
if user
if user.kind == 'user'
if user.charge == 'Auxiliar'
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Auxiliar', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
end
if user.charge == 'Analista'
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Auxiliar', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Analista', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
end
if user.charge == 'Coordenador'
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Auxiliar', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Analista', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Coordenador'
end
if user.charge == 'Supervisor'
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Auxiliar', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Analista', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Coordenador', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Supervisor', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
end
if user.charge == 'Gerente'
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Auxiliar', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Analista', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Coordenador', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Supervisor', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
can [:index_pdf, :show, :read, :view, :index], Pop, status: 'active', charge: 'Gerente', id: PopGroup.where(group_id: user.group_ids).pluck(:pop_id).uniq
end
if user.charge == 'Diretor'
can :index_pdf, Pop, status: 'active'
can :read, Pop, status: 'active'
end
end
end
end
end
habe ich versucht, in vielerlei Hinsicht, aber ich konnte nicht Bring ihn dazu, das zu nehmen, was der Benutzer nicht sehen konnte. Hat jemand irgendwelche Ideen?