Rails: редактируемое / не редактируемое поле в зависимости от прав пользователя - PullRequest
1 голос
/ 05 июля 2010

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

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

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

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

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

Редактировать:

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

Ответы [ 3 ]

0 голосов
/ 05 июля 2010

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

0 голосов
/ 14 июля 2010

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

@model=Model.new
@model.field = params[:model][:field] if can? ....
@model.save
0 голосов
/ 05 июля 2010

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

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