1

我有一个控制器before_filter将非管理员用户重定向到根路径,如果他们试图更新其他人的配置文件:

before_filter :correct_user, only: [:edit, :update]
....
private
  def correct_user
    @user=User.find(params[:id])
    redirect_to(root_path) unless current_user?(@user) || current_user.admin?
  end

我在两个不同的控制器中使用这个过滤器,我想干掉代码。

当我将方法移动到application_helper.rb时,我的规范仍然通过,但我厌倦了@user在帮助文件中分配变量。这会带来什么伤害吗?我至少应该将变量的分配委托给助手中的私有方法吗?

在这种情况下复制代码会更好,还是我的解决方案足够安全?

4

1 回答 1

1

将您的正确用户方法移动到您的应用程序控制器中,然后您可以在任何带有 before_filter 的控制器中使用。

于 2012-05-24T05:32:54.820 回答