簡體   English   中英

索引列出了所有內容,cancancan未過濾

[英]The index is listing everything, cancancan is not filtering

我有一個列出所有彈出窗口的視圖,僅取決於用戶,它不應該顯示所有內容,因此我使用了cancancan進行過濾,但是它不再起作用。

我的觀點(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 %>

我的模特

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

我嘗試了很多方法,但無法讓他接受用戶看不見的內容。 有人有什么想法嗎?

好吧,我設法使它起作用。 這是代碼。

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

第一個“如果”是“每個”都不創建空行。 其他是查看用戶是否具有權限的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM