Rails:在视图中限制页面访问是一种好习惯吗?

时间:2012-01-29 02:20:09

标签: ruby-on-rails authentication view restriction

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

现在我想知道这是好的做法还是会导致一些严重的漏洞问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

这将创建如下路线:

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

在您的创建操作中,您可以设置会话存储(如果密码正确)。在您的身份验证检查中,只需检查该会话存储的值。