当有很多角色时,Rails可以扫描如何限制用户权限?

时间:2017-03-17 08:05:25

标签: ruby-on-rails cancancan rolify

当有很多角色时,Rails可以扫描如何在视图中限制用户权限?每个角色都有多个特权。 例如,在我的rails应用程序中,大约有50个视图文件,例如article.html.erb,product.html.erb,comment.html.erb,order.html.erb,...等等。我要做的是在每个.html.erb文件中添加权限:

 <% if can? :update, @article %>
    <%= link_to "Edit", edit_article_path(@article) %>
 <% end %>
...
 <% if can? :update, @product %>
    <%= link_to "Edit", edit_product_path(@product) %>
 <% end %>

因此,如果以这种方式,我必须做很多繁琐的工作。当请求发生变化时,我必须修改多个.html.erb文件。

所以我的问题是,如果有任何方法我可以接受以避免这种方式?比如使用全局标签来控制所有要显示的视图还是不显示“编辑”,“销毁”方法?

1 个答案:

答案 0 :(得分:0)

您可以使用layouts in rails 创建一个部分视图,在_user_privileges.html.erb中的layouts文件夹中说app/views,然后在那里编写与权限相关的代码。现在,在其他每个视图文件中,您都可以使用<%= render 'layouts/user_privileges' %>。所以现在您可以使用单个文件来更改权限。

<强> _user_privileges.html.erb

<% if can? :update, @article %>
    <%= link_to "Edit", edit_article_path(@article) %>
 <% end %>
...
 <% if can? :update, @product %>
    <%= link_to "Edit", edit_product_path(@product) %>
 <% end %>

article.html.erb,product.html.erb,comment.html.erb,order.html.erb等。

...
<%= render 'layouts/user_privileges'  %>
...