Tôi có ứng dụng Rails 4 sử dụng Active Admin 1.0.0.pre1 kết hợp với pundit 0.3.0 để ủy quyền đã hoạt động hoàn hảo, nhưng tôi gặp khó khăn trong việc tìm ra cách tự động tùy chỉnh biểu mẫu dựa trên người dùng vai trò.Làm cách nào để tự động xóa các mục nhập của Biểu mẫu quản trị viên đang hoạt động với các thuộc tính được phép Pundit?
Với những mô hình:
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
Tôi muốn cho role
đầu vào để được tự động xóa khỏi biểu mẫu.
Một lựa chọn sẽ là một cái gì đó dọc theo dòng:
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
nhưng, cách tiếp cận này đòi hỏi các nhà phát triển để nhớ được các thuộc tính cần được kiểm tra, có vẻ dễ bị lãng quên và không chính xác DRY. Có lẽ, tôi đang đi về điều này một cách sai lầm? Tất cả các đề xuất đều được chào đón.
Tôi chắc chắn 95%, câu trả lời ẩn ở đâu đó dọc theo phương thức 'main_content' tại đây: https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/views/pages/form.rb. Tôi không có một dự án mở với AA ngay bây giờ để kiểm tra nó ra, nhưng bạn có thể ghi đè lên lớp đó và thử tự loại trừ đầu vào ': role' khỏi buider. –