Rails cancancan 如何在角色多的情况下限制view中的用户权限?

Rails cancancan how to limit user privilige in view when there are lots of roles?

Rails cancancan 如何在角色很多的情况下限制view中的用户权限?每个角色都有多个权限。 例如,在我的 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文件。

所以我的问题是,是否有任何我可以接受的方法来避免这种方式?比如用一个全局标签控制所有视图显示或不显示"Edit","Destroy"方法?

您可以使用 layouts in rails.
创建一个局部视图,比如 _user_privileges.html.erb inside layouts folder in 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'  %>
...