Was Sie versuchen, gegen die Art von MVC zu tun und ist eine ziemlich schlechte Idee.
Während Sie in der Ansicht autorisieren können:
# In views
<% if policy(:dashboard).show? %>
<%= link_to 'Dashboard', dashboard_path %>
<% end %>
Das ist für Stücke der Ansicht, nicht ganze Aktionen zur Ermächtigung.
Der Grund dafür ist, dass Autorisierungssysteme wie Pandit arbeiten, indem sie eine Ausnahme auslösen, die im Controller gefangen wird, um die "Fehler" -Seite zu rendern, die von der Ausnahme rettet (normalerweise die Login-Ansicht). Eine nicht autorisierte Aktion sollte auch einen anderen HTTP-Antwortcode zurückgeben. Dies erfolgt, wenn die Wiedergabe der Ansicht bereits begonnen hat, zu spät im Antwortzyklus und würde einen doppelten Renderfehler verursachen, da der Server möglicherweise bereits mit dem Senden der Antwort begonnen hat.
Stattdessen können Sie eine Maden Richtlinie erstellen:
class AdminPolicy < Struct.new(:user, :admin)
def admin?
user.admin?
end
end
Und Sie können es wie so verwenden:
# app/controllers/concerns/administrated.rb
module Administrated
extends ActiveSupport::Concern
included do
before_action :authorize_admin
end
def authorize_admin
authorize(:admin, :admin?)
end
end
class ThingsController < ApplicationController
include Administrated
end