使用实例变量或帮助程序管理用户权限

时间:2015-07-23 02:33:26

标签: ruby-on-rails ruby model-view-controller coding-style

我正在寻找处理用户权限的最简洁方法。它将用于定义是否可以显示菜单选项(菜单存在于所有视图中)以及对页面的访问。 所以我想知道哪种方法最干净。

  1. 在控制器的每个操作中设置一个实例变量,验证用户是否有权访问

  2. 如果当前用户有权访问,请在每次调用时在应用程序助手中添加一个方法

2 个答案:

答案 0 :(得分:1)

您是否尝试实施管理员或类似的东西?我认为最干净的方法是在users表中创建一个新列,大多数情况下初始化为false,但如果用户是admin(或其他),则为true。然后你可以让两个部分来处理这两种情况。

在这种情况下,在您的菜单视图中(在您的布局或诸如此类别中),您将获得此代码或类似内容:

<% if current_user.admin? %>
    <%= render 'admin_page' %>
<% else %>
    <%= render 'user_page' %>
<% end %>

我假设您在控制器中定义了@current_user,或者如果您使用的是Devise,则会自动处理。

编辑:是的我支持早期的答案,CanCan也是处理这些事情的好宝石,你应该考虑使用它。在这种情况下,您的代码看起来像:

<% if can? :update, @user %>
  # Edit something 
  <%= link_to edit_profile_path(@user), class: 'user' do %>
    Edit your profile
  <% end %>
<% end %>

答案 1 :(得分:1)

您可以在ApplicationController中定义将检查当前用户权限的方法。您可以在before_action回调中使用该方法来执行您需要的操作。

我建议看一下cancancan gem(这是社区驱动的康康宝石支持)

使用它可以轻松authorize actionscheck abilities来决定是否显示菜单项。

您还可以查看有关该主题的RailsCast,以了解整个想法。