gpt4 book ai didi

ruby-on-rails-4 - 如何使用 Pundit 允许的属性自动删除 Active Admin 表单输入?

转载 作者:行者123 更新时间:2023-12-04 21:39:53 24 4
gpt4 key购买 nike

我有一个 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

但是,这种方法要求开发人员记住应该检查哪些属性,似乎容易健忘并且不完全干燥。也许,我正在以错误的方式解决这个问题?欢迎所有建议。

最佳答案

通过添加一个覆盖 input 的模块来拦截 ActiveAdminForm对照 Pundit 政策进行检查似乎效果很好。这是我使用的实现:

# /lib/active_admin/permitted_active_admin_form.rb
module PermittedActiveAdminForm
def permitted_attributes
policy = Pundit.policy(current_admin_user, resource)
policy.respond_to?(:permitted_attributes) ? policy.permitted_attributes : []
end

def input(*args)
super(*args) if permitted_attributes.include? args[0]
end
end


# /config/initializers/active_admin.rb
module ActiveAdmin
module Views
class ActiveAdminForm < FormtasticProxy
prepend PermittedActiveAdminForm
end
end
end

# /app/admin/admin_user.rb
ActiveAdmin.register AdminUser do
permit_params do
resource ||= AdminUser
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

感谢 Andrey Deineko 让我走上了正确的道路。

关于ruby-on-rails-4 - 如何使用 Pundit 允许的属性自动删除 Active Admin 表单输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29496658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com