RAILS:保护客户路线,防止未经授权的访问

时间:2015-06-17 00:51:18

标签: ruby-on-rails ruby-on-rails-4 devise

我有一条路线match "company/:company_id/edit_users"我想锁定给当前登录的用户。

例如,当前登录的用户与公司ID为1。

因此,用户应该可以访问/company/1/edit_users,但无法访问/company/2/edit_users

如何确保此安全,并重定向到“未经授权的访问”?如果用户尝试访问他们无权查看的网页,该页面会显示?

1 个答案:

答案 0 :(得分:1)

您可以在公司控制器中设置类似verify_access方法的内容(假设路由处理的位置),您为before_action方法调用edit_users。把它放在控制器的顶部附近:

before_action :verify_access, :only => [:edit_users]

然后将该方法定义为私有方法,可能是这样的:

private
  def verfiy_access
    unless current_user.company.id == params[:id]
      flash[:alert] = "You do not have authority to access that page."
      redirect_to unauthorized_access_path
    end
  end

您需要为自己的应用自定义此功能,并确保其适当限制访问权限。

如果需要,您还可以展开before_action以包含其他操作:

before_action :verify_access, :only => [:edit_users, :update_users, :destroy_users]