2010-07-05 4 views
1

Я хотел бы отобразить одну форму, в которой каждый пользователь может редактировать разные поля.Rails: редактируемое/редактируемое поле в зависимости от разрешений пользователя

В настоящее время код выглядит следующим образом:

<% if can? :update, item %> 
` <%= f.text_field :title %> 
<% else %> 
    <%=h f.object.title %> 
<% end %> 

Я могу упаковать это в серии хелперов (по одному для каждого типа поля), но я также должен проверить в контроллере, может ли пользователь обновить все (в случае, если злоумышленник пытается отправить поля, на которые он не уполномочен).

Есть ли более чистый узор в рельсах для этого типа задач? В идеале я хотел бы определить эти разрешения доступа в модели и распространить изменения на контроллер и просмотр.

Edit:

Использование readonly тег не является жизнеспособным вариантом; Он не заботится о проверках и заменяет логику представления множеством CSS. Не лучший компромисс.

ответ

0

Вы можете сделать их только для чтения

<%= f.text_field :title, :readonly=> (can? :update, item)? true : false %> 
+0

Это просто косметика; Это зависит от того, предпочитаете ли вы писать много CSS (чтобы стилировать элементы управления readonly, как если бы они были обычным текстом) или предпочесть дополнительную логику в представлении. И это не касается вопроса о проверке на стороне контроллера. – shmichael

0

Посмотрите на acl9 плагин для авторизации.

+0

Насколько я мог судить, это ничем не отличается от декларативного разрешения или cancan: мне все равно нужно реализовать все различные логики в контроллере/представлении. – shmichael

+0

Да. Я понял, что вы уже используете рамки авторизации. Я думаю, что в контроллерах не происходит проверки условий. –

0

Я не верю Theres каким-либо образом решить эту проблему с помощью плагина, единственным вариантом было бы изменить код контроллера для:

@model=Model.new 
@model.field = params[:model][:field] if can? .... 
@model.save 
Смежные вопросы