我有2个表,Users
和Customers
以及2个不同的操作。所以我需要2个身份验证系统。用户使用用户名和密码登录,客户使用和id和密码登录。
我知道蛋糕默认AuthComponent
只能处理1个模型,User
模型。因为'userModel'可以是字符串而不是数组(不是吗?)。
如何在2个模型(和表格)中使用2个登录页面和2个....
(注意:我无法合并2个表。它们有不同的模式)
答案 0 :(得分:1)
我强烈建议您研究ACL和ARO,而不是尝试维护2个不同的Auth系统。这将允许您将用户与不同的访问组相关联 - 在您的情况下,您可以拥有“内部” 1 和“Customers”等组,并且每个新用户帐户都是一个组或另一个组的成员。
然后,您可以在组级别授予权限。客户用户可以访问他们的内容,内部用户可以访问不同的内容。
新的CakePHP书中有一个很好的教程:Simple Acl controlled Application
1 我假设当你提到“用户”时,你的意思是内部用户,但可以随意根据你的具体情况调整术语和组名。
答案 1 :(得分:0)
我会假设2个单独的登录区域或单选按钮来建议他们正在尝试登录。
使用该表作为哪个表进行身份验证,然后您的代码应遵循相同的路径。
if (customer) {
do customer stuff;
} elseif (user) {
do user stuff;
} else {
you didn't login;
}
答案 2 :(得分:0)
当您为他们创建注册表单时,尝试将他们的数据放入不同的数据库中。这样你就可以区别对待它们了。为此,请检查提交按钮ID并将数据定向到适当的表。将put id作为自动增量插入时。
答案 3 :(得分:0)
我建议不要在这种情况下歧视用户和客户。可以使用角色解决这些问题。在开始设计之前,请阅读Authentication, Authorization and Audit和Role-Based Access Control。
根据我的理解,这是对身份验证过程的概述(请注意,我不是安全专家):
识别阶段涉及获取用户凭证。一个简单的表单,可以检索用户的名称和密码就足够了。
身份验证阶段表示将用户凭据映射到用户的过程。基本上,它标识身份提供者并使用它来获取所提供的用户凭证的用户ID。
与服务类似,它们看起来像这样:
// You can have many IdentityProviders. This mecanism allows you to extend your
// authentication system so you can use any mechanism (WebDav, Kerberos, etc).
IIdentityProvider
{
// Returns a pozitive id if the user is found and the credentials are valid
// or zero if user credentials are invalid (or negative numbers that represent
// error codes).
UserID GetUser(UserCredentials)
}
IAuthenticationService
{
Session SignIn(UserCredentials)
void SignOut(Session)
}
DefaultIdentityProvider : IIdentityProvider
{
// Search the user in your database.
UserID GetUser(UserCredentials credentials)
}
AuthenticationService : IAuthenticationService
{
IIdentityProvider[] identityProviders
Session SignIn(UserCredentials credentials)
{
IIdentityProvider provider = identityProviders[credentials.Type]
Session session = null
if (provider)
{
UserID userID = provider.GetUser(credentials)
if (userID > 0)
{
session = new Session
session.UserID = userID
}
}
return session
}
void SignOut(Session session)
{
delete session
}
}
自动化系统说明用户可以使用资源做什么。资源可以是应用程序管理的任何实体。他们有类型和 ID 。可选地,它们可以是一个或多个类别的一部分。用户可以在资源上执行某些操作,具体取决于其类型和类别。这是由权限定义的。权限分组在角色中。您可以为用户分配零个或多个角色。
在您的示例中,客户是一个角色。资源例如是产品。产品由产品类型表示,它具有ID并且可以具有关联的一些类别(“电子”和“危险”)。可以将操作视为创建/读取/更新/删除动词的变体。现在,Customer角色将包含一组权限,这些权限明确说明具有此角色的用户可以对托管资源执行的操作。例如,客户只能阅读有关产品的某些信息,但不能创建,更新或删除产品。请注意,如果用户关联了多个角色,则会获得该角色的所有权限(联合操作,而不是交集)。
这只会划伤表面。为了进一步阅读,您可以在互联网上找到更多可以更好地解释这些概念的文章。这是为了指出你正确的方向。