Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:可编辑/不可编辑字段,具体取决于用户权限_Ruby On Rails_Webforms_Authorization - Fatal编程技术网

Ruby on rails Rails:可编辑/不可编辑字段,具体取决于用户权限

Ruby on rails Rails:可编辑/不可编辑字段,具体取决于用户权限,ruby-on-rails,webforms,authorization,Ruby On Rails,Webforms,Authorization,我想显示一个表单,每个用户可以在其中编辑不同的字段 目前,代码如下所示: <% if can? :update, item %> ` <%= f.text_field :title %> <% else %> <%=h f.object.title %> <% end %> 我可以将其打包为一系列帮助程序,每种字段类型一个,但我还必须在控制器中检查用户是否可以更新所有提交的字段,以防恶意用户尝试提交未经授权的字段 对于这类任务

我想显示一个表单,每个用户可以在其中编辑不同的字段

目前,代码如下所示:

<% if can? :update, item %>  
` <%= f.text_field :title %>
<% else %>
  <%=h f.object.title %>
<% end %>
我可以将其打包为一系列帮助程序,每种字段类型一个,但我还必须在控制器中检查用户是否可以更新所有提交的字段,以防恶意用户尝试提交未经授权的字段

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

编辑:


使用readonly标签不是一个可行的选择;它不负责验证,而是用大量CSS替换视图逻辑。这不是最好的折衷办法。

您可以将其设置为只读

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

请看一下授权插件。

我不相信有任何方法可以通过插件解决此问题,唯一的选择是将控制器代码更改为:

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

只是化妆品;这取决于您是喜欢编写大量CSS,而不是像纯文本一样为只读控件设置样式,还是喜欢在视图中添加一些额外的逻辑。而且它没有解决控制器端验证的问题。据我所知,它与声明性授权或cancan没有什么不同:我仍然必须在控制器/视图中实现所有不同的逻辑。是的。我意识到您已经在使用自动化框架。我想控制器中的条件检查是无法逃避的。