2017-12-15 4 views
1

私はすべてのポップをリストしたこのビューを持っていますが、それはユーザーに依存しているだけで表示されるべきではありません。 。インデックスにはすべてがリストされており、cancancanはフィルタリングされていません

私の見解(ポップ/ 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 %> 

私のモデル

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 

私の能力

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 

私は多くの方法で試してみましたが、私はできませんでした彼にユーザーが見ることができなかったものを取らせてください。誰にもアイデアはありますか?

答えて

0

さて、私はそれを動作させることができました。ここにコードがあります。

<% @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%> 

最初の 'if'は 'each'が空白行を作成しないことです。他は、ユーザーに許可があるかどうかを確認するテストです。

関連する問題