2017-12-15 2 views
1

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?

Antwort

0

Okay, ich habe es geschafft, es zum Laufen zu bringen. Hier ist der Code.

<% @pops.each do |pop| %> 
      <tbody> 
      <% if can? :show, pop %> 
       <tr>      
        <td><%= pop.title if can? :show, pop %></td>     
        <td><%= link_to 'Visualizar', pop if can? :show, pop %></td>     
        <td><%= link_to 'Editar', edit_pop_path(pop) if can? :edit, pop %></td> 
        <td><%= link_to 'Excluir', pop, method: :delete if can? :delete, pop %></td> 
        <td><%= link_to 'Exportar', index_pdf_path(pop) if can? :index_pdf, pop %></td>  
       </tr> 
      <% end %> 
<%end%> 

Das erste 'wenn' ist, dass das 'each' keine Leerzeilen erzeugt. Die anderen sind die Tests, um zu sehen, ob der Benutzer die Erlaubnis hat.

Verwandte Themen