2016-07-24 2 views
0

Я пытаюсь выяснить, как использовать pundit с моими рельсами 4 приложения.Rails - Pundit - метод решения не работает правильно

У меня есть политика в отношении статьи и индекс статьи.

В политике статьи у меня есть метод разрешения, который имеет возможности для разных типов пользователей.

def resolve 
    if user == @user.id 
     scope.all.where(user_id: user.id) 
    elsif user.has_role?(:org_approver) 
     scope.to_be_reviewed 
    else 
     scope.in_state(:publish) 
    end  
end 

В указательного шоу, я ожидал, чтобы показать каждому пользователю статьи в массиве в зависимости от категории они вписываются в мой метод Resolve.

<% policy_scope(Article).sort_by(&:created_at).in_groups_of(2) do |group| %> 
    <div id="portfolioFiltering" class="masonry-wrapper row"> 
     <% group.compact.each do |article| %> 
     <div class="col-md-4 col-md-offset-1 portfolioitem Scienza"> 
     <div class="portfolio-item text- 

Я не получаю никаких ошибок, но когда я войти в систему в качестве пользователя, который является автором статьи, я ожидаю получить все статьи, принадлежащие ко мне (как этого пользователя). Вместо этого я получаю только все опубликованные статьи (что является последней альтернативой в моем методе разрешения).

Может ли кто-нибудь увидеть, где я ошибся?

ответ

0

Я считаю, что эта линия является проблема:

user == @user.id 

должно быть:

user == @user 

Поскольку User объект никогда не будет равен к Integer объекта, который является то, что вы получаете, когда вы звоните id на объект User.

Также обратите внимание на Pundit GitHub page и прокрутите вниз до раздела RSpec при тестировании. Вы всегда должны проверять аутентификацию и авторизацию.