Ich versuche herauszufinden, wie man Pandits Berechtigungen in meiner Rails 4 App schreiben.Rails - Pundit mit Scopes
Ich habe ein Artikelmodell mit einer Artikelrichtlinie. Der Artikel Politik:
class ArticlePolicy < ApplicationPolicy
attr_reader :user, :scope
def initialize(user, record, scope)
@scope = scope
super(user, record)
end
class Scope < Scope
def resolve
if user == article.user
scope.where(user_id: user_id)
elsif approval_required?
scope.where(article.state_machine.in_state?(:review)).(user.has_role?(:org_approver))
else
article.state_machine.in_state?(:publish)
end
end
end
# TO DO - check if this is correct - I'm not sure.
# I now think I don't need the index actions because I have changed the action in the articles controller to look for policy scope.
# def index?
# article.state_machine.in_state?(:publish)
# end
def article
record
end
Der Artikel Controller hat:
def index
@articles = policy_scope(Article)
# query = params[:query].presence || "*"
# @articles = Article.search(query)
end
Ich folge den Pandit Dokumente Bereiche beziehen und versuchen, herauszufinden, warum die Aktion Index in den politischen Dokumenten dargestellt ist nicht für mich arbeiten. Ich habe folgendes versucht (wie in der Dokumentation gezeigt):
<% policy_scope(@user.articles).sort_by(&:created_at).in_groups_of(2) do |group| %>
aber ich bekomme diese Fehlermeldung:
undefined local variable or method `article' for #<ArticlePolicy::Scope:0x007fff08ae9f48>
Kann jemand sehen, wo ich falsch gegangen?
Ich bin mir nicht sicher, ob @ user.articles richtig ist. In meinem Konstrukt gehören Artikel zu Benutzern, aber in meiner Indexaktion möchte ich jedem Benutzer die Artikel zeigen, die meine Bereiche ihnen anzeigen lassen.
@Blal - danke für den Vorschlag. Ich habe das versucht, aber ich bekomme immer noch dieselbe Fehlermeldung wie oben. – Mel
Können Sie überprüfen, ob die Datensatzvariable den jeweiligen Artikel enthält? Ich denke, es sollte die Artikelaufzeichnung enthalten. –
Hallo @Bllal - Es tut mir leid, aber ich weiß nicht, was das bedeutet. – Mel