有选择地允许批量分配

时间:2014-08-15 19:14:56

标签: ruby-on-rails-4

我正在编写应用程序并使用Rails Tutorial中的授权/身份验证方法作为我的基础。我希望管理员用户能够更改其他用户的管理状态,同时防止非管理员用户执行相同操作。以下解决方案是否可以安全实施?有更优雅的解决方案吗?

控制器:

class UsersController < ApplicationController
...
  def user_params
    if current_user.admin?
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation, :admin)
    else
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
  end
end

助手:

module SessionsHelper

 def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.digest(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end
end

1 个答案:

答案 0 :(得分:0)

我建议使用 pundit

之类的内容

应用程序/策略/ user_policy.rb

class UserPolicy < ApplicationPolicy
  def permitted_attributes
    attrs = [ :name, :email, :password, :password_confirmation ]

    attrs << :admin if user.admin?

    attrs
  end
end

应用程序/控制器/ users_controller.rb

class UsersController < ApplicationController

  # ...

  private

    def user_params
      params.require(:user).permit(*policy(@user || User).permitted_attributes)
    end
end