我的应用程序有用户部分和/ admin部分。有2个模型帐户(如客户)和管理员,我应该分别验证帐户和管理员。管理员不应该访问帐户的部分,帐户不应该访问管理区域。是否有任何解决方案,或者我应该为用户和管理员编写2个不同的应用程序,然后等待merb 1.1并以某种方式将它们安装到1个应用程序中?有什么想法吗?
答案 0 :(得分:1)
你的问题对我来说似乎很有趣,我在开始时遇到了同样的问题。所以,我可以建议不同的解决方案,您可以从中选择一个取决于您的应用程序结构。
如果您的所有用户都属于一个类但具有特殊字段(如UserClass =(:client,:moderator,:admin等),那么您将最少修改应用,只需检查用户类参数在你的控制器/视图中。我认为这不适合你。
最佳做法 - 使用Merb身份验证策略。它是非常灵活的机制,因此您可以选择要使用的类。
例如,您将有两个基本策略: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方法)
以下是一些有用的链接: