2013-05-16 2 views
1

В настоящее время я изменяю, как работает мой интерфейс ActiveAdmin, так что он объединяет как элементы attr_accessible, так и CanCan. В некоторых из моих моделей у меня есть определенное действие контроллера для кнопки Submit на форме, такие какИспользование кнопки ActiveAdmin Submit в отношении attr_accessible

= 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?

ответ

1

ActiveAdmin и SimpleForm не поддерживают функцию as: [role], с которой я пытался работать. Однако это не проблема с сильными параметрами в Rails 4, поскольку это совершенно другой способ обработки массового присвоения.

Кроме того, CanCan блокирует любые хакеры массового присвоения, так как вы не можете назначить массовое присвоение, если у вас нет доступа к форме, и если у вас нет явного разрешения :edit, :update, or :manage, то у вас нет доступа к форма.