我目前正在改变我的 ActiveAdmin 界面的工作方式,以便它集成attr_accessible
项目和 CanCan。在我的一些模型中,我对表单上的提交按钮有一个特定的控制器操作,例如
= f.actions do
= f.action :submit, label: 'Update Password'
在这种Update Password
方法中,我可以知道当前管理员用户在update_attributes(*,as: @admin_user.role.name.to_sym)
哪里。@admin_user
这仅允许具有允许角色的管理员用户更新其密码。
我遇到的问题是 ActiveAdmin 进行通用更新时,特别是
=f.action :submit
如何将选项传递给 ActiveAdmin,以便在更新时使用指定的角色?我知道按钮使用 Formtasti,并且该:label
方法是其中的一部分,但我似乎找不到任何关于使用传递其他选项的信息。
我的一个选择是在我的每个模型中为编辑方法编写一个覆盖,但这有点违背了 ActiveAdmin 的目的,不是吗?
现在,我的 CanCan 能力已经设置为只有某些角色可以访问某些项目。这会覆盖attr_accessible
项目吗?我知道如果该项目不是 attr_accessible
,即使它在 CanCan 中是可管理的,也不会通过批量分配而改变。
我真正需要知道的是,如果我是黑客,我是否可以注入一个update_attributes(params[:whatever], as: :admin)
并且它会因为 CanCan 的能力而阻止它?attr_accessible
同时通过CanCan 的能力等级保护该项目是否值得?