Ho un'app Rails 4 che utilizza Active Admin 1.0.0.pre1 in congiunzione con pundit 0.3.0 per l'autorizzazione che ha funzionato perfettamente fino ad ora, ma ho problemi a trovare un buon modo per personalizzare automaticamente i moduli in base a quelli di un utente ruolo.Come rimuovere automaticamente gli input del modulo Active Admin con gli attributi consentiti da Pundit?
Attribuite questi modelli:
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
mi piacerebbe per l'ingresso role
per essere rimosso automaticamente dal modulo.
Una possibilità sarebbe qualcosa sulla falsariga di:
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
ma, che approccio richiede allo sviluppatore di ricordare quali attributi devono essere controllati, sembra incline alla dimenticanza e non è esattamente SECCO. Forse, sto andando su questo nel modo sbagliato? Tutti i suggerimenti sono benvenuti
Sono sicuro al 95%, la risposta si nasconde da qualche parte lungo il metodo 'main_content' qui: https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/views/pages/form.rb. Al momento non ho un progetto aperto con AA per testarlo, ma puoi ignorare quella classe e provare manualmente a escludere l'input ': role' dal buider. –