2010-07-05 98 views
1

我想显示一个表单,其中每个用户可以编辑不同的字段。Rails:可编辑/不可编辑的字段取决于用户权限

目前,代码如下:

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

我可以在一系列帮手(每个字段类型)封装,但我也有在控制器检查用户是否可以更新所有提交的字段(如果恶意用户试图提交他未被授权的字段)。

这种类型的任务在轨道中是否有更清晰的模式?理想情况下,我想在模型中定义这些访问权限,并将这些更改传播到控制器和视图。

编辑:

使用readonly标签是不是一个可行的选择;它不考虑验证,并用很多CSS替换视图逻辑。不是最好的折衷。

回答

0

你可以让他们只读

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

这只是化妆品;这取决于你是否更喜欢编写大量的CSS(将只读类型的控件设置为纯文本样式),还是喜欢在视图中使用一些额外的逻辑。 而且它没有解决控制器端验证问题。 – shmichael 2010-07-05 14:27:26

0

看看在acl9插件授权。

+0

据我所知,它与声明性授权或cancan没有区别:我仍然必须在控制器/视图中实现所有各种逻辑。 – shmichael 2010-07-06 07:05:35

+0

是的。我意识到你已经在使用自动化框架。我想没有逃避控制器的条件检查。 – 2010-07-06 07:23:53

0

我不相信的时候那里有没有办法跟一个插件来解决这个问题,唯一的选择是将控制器代码更改为:

@model=Model.new 
@model.field = params[:model][:field] if can? .... 
@model.save