1

我目前正在改变我的 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 的能力等级保护该项目是否值得?

4

1 回答 1

1

ActiveAdmin 和 SimpleForm 不支持as: [role]我尝试使用的功能。然而,这不是 Rails 4 中的 strong_parameters 的问题,因为它是一种完全不同的处理质量分配的方式。

此外,CanCan 确实阻止了任何批量分配黑客,因为除非您有权访问表单,否则您无法批量分配,并且如果您没有明确的:edit, :update, or :manage许可,则您无权访问该表单。

于 2013-07-24T17:45:35.443 回答