【问题标题】:Rails cancancan how to limit user privilige in view when there are lots of roles?当有很多角色时,Rails cancancan如何限制视图中的用户权限?
【发布时间】:2017-08-08 16:48:49
【问题描述】:

Rails cancancan 在有很多角色时如何限制用户权限?每个角色都有多个特权。 例如,在我的 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”方法?

【问题讨论】:

    标签: ruby-on-rails cancancan rolify


    【解决方案1】:

    您可以使用layouts in rails
    app/views 中的layouts 文件夹中创建一个局部视图,例如_user_privileges.html.erb,并在那里编写与权限相关的代码。现在在每个其他视图文件中,您可以使用&lt;%= render 'layouts/user_privileges' %&gt;。所以现在您可以使用单个文件来更改权限。

    _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'  %>
    ...
    

    【讨论】:

    • 如果我创建一个局部视图,我必须随着开发需求的变化每次更改局部视图。所以我的问题是,我是否可以在视图中添加一个标签或更简单的方法,例如使用 gem 来做到这一点?如果有宝石或更简单的方法可以做到这一点,我将不胜感激。 @萨金
    猜你喜欢
    • 2018-10-03
    • 2011-06-25
    • 1970-01-01
    • 2014-06-24
    • 2016-12-04
    • 1970-01-01
    • 2013-04-15
    • 2015-11-26
    • 2018-11-18
    相关资源
    最近更新 更多