Merb身份验证问题

时间:2009-08-07 07:46:40

标签: merb merb-auth

我的应用程序有用户部分和/ admin部分。有2个模型帐户(如客户)和管理员,我应该分别验证帐户和管理员。管理员不应该访问帐户的部分,帐户不应该访问管理区域。是否有任何解决方案,或者我应该为用户和管理员编写2个不同的应用程序,然后等待merb 1.1并以某种方式将它们安装到1个应用程序中?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的问题对我来说似乎很有趣,我在开始时遇到了同样的问题。所以,我可以建议不同的解决方案,您可以从中选择一个取决于您的应用程序结构。

  1. 如果您的所有用户都属于一个类但具有特殊字段(如UserClass =(:client,:moderator,:admin等),那么您将最少修改应用,只需检查用户类参数在你的控制器/视图中。我认为这不适合你。

  2. 最佳做法 - 使用Merb身份验证策略。它是非常灵活的机制,因此您可以选择要使用的类。

  3. 例如,您将有两个基本策略:ClientAuth,AdminAuth。它们都将使用不同的用户类(Client,Admin)。您所需要的一切 - 创建自定义策略文件,然后将其连接到路由器,如下所示:

    authenticate(ClientAuth) do
      match('/profile').to(:controller => ProfileController)
    end
    
    authenticate(AdminAuth) do
      match('/admin').to(:controller => AdminController)
    end
    

    或者,您可以在控制器中使用身份验证:

    class AdminController
      :before ensure_authenticated, :with => [AdminAuth]
    
      def index
         ... your stuff ...
      end
    end
    

    此外,您甚至只能使用一个控制器对两个类进行身份验证,使用以下两种策略:

    class AdminController
      :before ensure_authenticated, :with => [AdminAuth, ClientAuth]
    end
    

    只是因为您为策略设置了不同的身份验证类(Admin,Client),您将能够获得有关它的信息:session.user.class(它是查找对象类名的基本ruby方法)

    以下是一些有用的链接:

    1. http://www.slideshare.net/hassox/merb-auth-presentation
    2. http://merbunity.com/tutorials/19
    3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
    4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy