【问题标题】:Rails: Is it good practice to restrict page access in the view?Rails:限制视图中的页面访问是一种好习惯吗?
【发布时间】:2012-02-21 10:49:57
【问题描述】:

我正在构建一个应用程序,人们可以在其中创建自己的页面并通过唯一的 URL 访问它们。没有使用电子邮件和密码或类似内容的标准登录。 人们可以决定是否要为其页面设置密码。 如果有人想查看或编辑页面,如果该页面设置了密码,则应要求他输入密码。如果没有,他应该能够立即查看或编辑该页面。 我想到的唯一方法是在没有繁重的解决方法的情况下实现这一点,将访问控制权放入视图并通过 if then else 更改其输出。

现在我想知道这是否是一种好的做法,或者它是否会导致一些严重的漏洞问题。

【问题讨论】:

    标签: ruby-on-rails authentication view restriction


    【解决方案1】:

    简短的回答:不。您不希望尽可能保持视图的逻辑清晰。更重要的是,最好使用宁静的设置,而不是将更多逻辑堆积到一个控制器和/或模型中。在这种情况下,我们谈论的是对用户进行身份验证。通常使用 before_filter 来检查用户是否已针对某个操作登录。所以你可以在控制器上使用 before_filter 。使用传入的方法检查对象是否受保护。当该对象受到保护时,检查用户当前是否已通过身份验证。

    在之前的过滤器中,您可以重定向到另一个操作,最好是您设置为使用密码表单的操作。我可能会为此创建一个单独的控制器。可以根据您的喜好将其称为会话或身份验证。为密码表单设置一个新操作,并设置一个创建操作。新视图需要在某种隐藏字段中包含 page_id,或者您可以使用嵌套资源将其保留在路由中。例如:

    resources :pages do
      resource :session, :only => [:new, :create]
    end
    

    这将创建如下路线:

    /pages/1/session/new
    /pages/1/session (POST)
    

    在您的创建操作中,您可以设置类似会话存储的内容(前提是密码正确)。在您的身份验证检查中,只需检查该会话存储的值。

    【讨论】:

    • 我被为了简单而打破 MVC 的诱人想法误导了。感谢您付出了这么多努力来解决这个问题
    • 这是一个很容易陷入的诱惑。但是,如果您想扩展限制对页面的访问的工作原理怎么办?比如登录id以后查看所有页面。那么你就已经为它奠定了一些基础工作。
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多