【问题标题】:How to restrict user access page in RoR?如何限制 RoR 中的用户访问页面?
【发布时间】:2010-01-23 09:27:33
【问题描述】:

我知道我可以在用户登录后进行会话。另外,我创建了一个名为“current_user”的辅助方法。我不希望其他未登录的人可以访问该页面。除了做这个,我还能怎么做?

我可以这样做以不允许人们访问内容,但我不希望登录中的用户也看到空白页面。

<% if current_user%>
My Content
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby authentication


    【解决方案1】:

    制作一个 before_filter 来检查 current_user 变量是否已设置,如果未设置,则将用户重定向到其他地方(根目录、注册页面等)。像这样的:

    class ApplicationController < ActionController::Base
      def login_required
        redirect_to('/') if current_user.blank?
      end
    end
    
    class MyController < ApplicationController
      before_filter :login_required, :only => :action_aviable_only_for_logged_in
    
      def action_aviable_only_for_logged_in
        ...
      end
    end
    

    【讨论】:

      【解决方案2】:

      身份验证是一个微妙的领域,它是开发人员不断重新发明轮子的方面之一。我建议您使用现成的库或插件来执行此操作。我特别推荐使用Authlogic 插件。

      它作为插件工作,因此不会生成代码或侵入性内容进入您的应用程序。

      在回答您的问题时,访问限制验证应该在控制器中进行,通过使用 before_filter 并检查他们将要执行的操作是否被允许。 (过滤器方法被传递给控制器​​实例,因此被授予对控制器所有方面的访问权限,并且可以在它认为合适的时候对其进行操作)

      但是,使用我上面提到的插件,这将很简单

      before_filter :require_user, :except => [:list]
      

      这将需要登录控制器中除列表操作之外的所有操作

      【讨论】:

        【解决方案3】:

        如果访问控制是唯一要处理的问题,我认为 before_filter 是可行的方法。我不认为 authlogic 真的可以帮助你。但是还有其他访问控制 gem,例如 Ryan Bates 的 cancan,它看起来很轻,而且很容易使用。然后是declarative authorization。但是,如果您有一个大型应用程序,我认为 before_filters 可以为您提供更大的控制权。您可能有单独的模块为每个实用程序提供访问控制。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 1970-01-01
          • 2018-01-27
          • 2012-09-17
          • 2019-03-04
          • 1970-01-01
          • 2016-10-18
          相关资源
          最近更新 更多