0

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

4

1 回答 1

1

你的问题对我来说似乎很有趣,我一开始也有同样的问题。因此,我可以建议不同的解决方案,您可以根据您的应用程序结构从中选择一种。

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

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

例如,您将有 2 个基本策略:ClientAuth、AdminAuth。他们都将使用不同的用户类别(客户、管理员)。您所需要的一切 - 创建自定义策略文件,然后将其连接到您的路由器,如下所示:

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
于 2009-08-17T03:24:33.463 回答