【发布时间】:2009-08-07 07:46:40
【问题描述】:
我的应用程序有用户部分和 /admin 部分。有 2 个模型帐户(如客户)和管理员,我应该分别验证帐户和管理员。管理员不应访问帐户的部分,帐户不应访问管理区域。有什么适合我的解决方案,或者我应该为用户和管理员编写 2 个不同的应用程序,然后等待 merb 1.1 并以某种方式将它们安装到 1 个应用程序中?有什么想法吗?
【问题讨论】:
我的应用程序有用户部分和 /admin 部分。有 2 个模型帐户(如客户)和管理员,我应该分别验证帐户和管理员。管理员不应访问帐户的部分,帐户不应访问管理区域。有什么适合我的解决方案,或者我应该为用户和管理员编写 2 个不同的应用程序,然后等待 merb 1.1 并以某种方式将它们安装到 1 个应用程序中?有什么想法吗?
【问题讨论】:
你的问题对我来说似乎很有趣,我一开始也遇到过同样的问题。因此,我可以建议不同的解决方案,您可以根据您的应用结构从中选择一个。
最佳实践 - 使用 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 方法来找出对象的类名)
这里有一些有用的链接:
【讨论】: