2017-07-16 85 views
1

我想允许只能从我的计算机或任何其他方式访问管理员用户的登录/注册页面,这样我只能看到管理员登录的网页。如何限制访问某个网页?

或者典型的网络应用程序做什么来限制公众访问某个网页?如果有投注练习方式,我希望实施。

我目前已安装Devise。

回答

3

您可以使用authenticate_user! Devise帮助程序,将其作为回调添加到所需的控制器中并指定要控制的方法。

举例来说,如果你有一个Post模型,然后在PostController加入authenticate_user!它会要求用户登录才能访问该方法在特定的控制器:

class PostsController < ApplicationController 
    before_action :authenticate_user! 

如果你想限制一些特定的方法,那么你可以玩only和/或except

参见:设计会创建一些助手到你的控制器 和视图中使用。要设置用户认证控制器,只需添加 这before_action(假设你的色器件模型是“用户”)

Devise - Controller filters and helpers

根据您的意见,那么你可以为了在ApplicationController创建方法限制您的所有控制器和方法。

这样你就可以定义地址数组,如果remote_iprequest未来是数组,然后你给访问,如果没有再进行任何其他操作:

ApplicationController < ActionController::Base 
    before_action :protect 

    private 

    def protect 
    addresses = ['127.0.0.1', ...] 
    if addresses.include?(request.remote_ip) 
     # give access 
    else 
     # restrict access 
    end 
    end 
end 

但如果你需要更复杂的东西,然后你不得不看到你的Nginx或Apache,无论你用什么来部署你的项目。

+0

这是一个请求在用户登录之前,应用程序不知道该访问是来自普通用户还是管理员用户。例如,我猜测任何系统应用程序都有一个仅管理员登录的网页,但我想知道这些应用程序如何限制公共浏览者甚至访问登录页面。有没有配置某种URL,以便URL只能从某个IP访问,就像那样。 – yamaoka

+0

我已经更新了答案,看看@yamaoka。 –

1

我通常通过控制器方法限制网页访问。我最近的使用案例只在付款成功后才会转到网页,如果有任何机构直接为该页面发出get request,则会导致404。

在您的情况中,可能存在多个选项进行设置。

  1. 您可以使用Cookie使用Action Dispatcher
  2. 使用设计让用户看到用户的凭据,然后就可以通过添加新的迁移解决了一定的作用,以用户和自己注册后,分配角色或让他们选择。

我会期待你遵循Devise路线。在控制器操作中检查当前用户的角色。

If User Not signed in (using current_user == nil) 
    redirect to home page and then return 

else 
    if 
    its admin you go ahead and use the success page as partial and let them see the page using `<%= render 'pages/mypage'%>` and use return to end 
    else 
    just redirect back to home page with a notice "Don't try this". 
    redirect_to root_path, notice: 'Don't try this' and then use 
    return to end 
end 

(只是为了好玩,就看用户有多少次这样做是错误的行动,你也可以有存储current_usernumber_of_wrong_attempt表,并存储他们的电子邮件时,他们尝试去未经许可该页面之后您可以通过后台搜索任务发送电子邮件给他们,该任务会检查某个错误的尝试阈值:“嗨!您的注册因为您正在执行未被禁止的操作而被删除”)