我有一个 Rails 4 应用程序,它使用 Active Admin 1.0.0.pre1 和 pundit 0.3.0 进行授权,到目前为止它工作得很好,但是我很难找到一种基于用户角色自动自定义表单的好方法。
鉴于这些模型:
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
我希望role
输入自动从表单中删除。
一种选择是:
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
但是,这种方法要求开发人员记住应该检查哪些属性,似乎容易健忘并且不完全干燥。也许,我正在以错误的方式解决这个问题?欢迎所有建议。