Ich habe eine Rails 4 App mit Active Admin 1.0.0.pre1 in Verbindung mit Pandit 0.3.0 für die Autorisierung, die bisher einwandfrei funktioniert hat, aber ich habe Probleme, herauszufinden, eine gute Möglichkeit, Formulare automatisch auf Basis eines Benutzers anpassen Rolle.Wie automatisch Active-Admin-Formular-Eingaben mit Pundit zulässigen Attribute entfernen?
Da diese Modelle:
ActiveAdmin.register AdminUser do
permit_params do
Pundit.policy(current_admin_user, resource).permitted_attributes
end
form do |f|
f.inputs "Admin Details" do
f.input :role, as: :select, collection: [:manager, :admin]
f.input :email, as: :email
f.input :password
f.input :password_confirmation
end
f.actions
end
end
class AdminUserPolicy < ApplicationPolicy
def permitted_attributes
attributes = [:email, :password, :password_confirmation]
attributes += [:role] if user.has_role? :super_admin
attributes
end
end
ich für den role
Eingang möchte automatisch aus der Form entfernt werden.
Eine Möglichkeit etwas entlang der Linien von wäre:
permitted_attributes = Pundit.policy(current_admin_user, resource).permitted_attributes
form do |f|
f.inputs "Admin Details" do
f.input :role if permitted_attributes.include? :role
f.input :email
f.input :password
f.input :password_confirmation
end
f.actions
end
aber, dass Ansatz erfordert den Entwickler daran zu erinnern, welche Attribute überprüft werden soll, scheint anfällig für Vergesslichkeit und ist nicht gerade trocken. Vielleicht gehe ich das falsch herum? Alle Vorschläge sind willkommen.
Ich bin zu 95% sicher, die Antwort versteckt sich irgendwo auf dem 'main_content' Methode hier: https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/views/pages/form.rb. Ich habe momentan kein offenes Projekt mit AA, um es zu testen, aber Sie können diese Klasse überschreiben und versuchen, die '' role''-Eingabe von Buider manuell auszuschließen. –