我正在寻找处理用户权限的最简洁方法。它将用于定义是否可以显示菜单选项(菜单存在于所有视图中)以及对页面的访问。 所以我想知道哪种方法最干净。
在控制器的每个操作中设置一个实例变量,验证用户是否有权访问
如果当前用户有权访问,请在每次调用时在应用程序助手中添加一个方法
答案 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 actions和check abilities来决定是否显示菜单项。
您还可以查看有关该主题的RailsCast,以了解整个想法。