我创建了一个多租户应用程序,其中每个租户都有不同的用户集。我正在尝试实现一个功能,其中相同的用户可能存在于不同的租户中。外部系统是否提供此类功能,或者我必须创建自定义逻辑? 现在,我确实在2个不同的租户中创建了一个具有相同用户名的用户,并且在登录期间我正在向用户显示选择租户。但是在更改租户和登录该租户时,环境不会切换到用户选择的租户。
以下是切换租户和登录客户的逻辑图。
在调试期间,我看到在执行 TenantSwitch 操作后,它确实更改了 Site.TenantID 属性,但在 User_Login 操作后还原为第一个租户不是一个用户选择的。
答案 0 :(得分:2)
当您使用User_Login()时,系统会将您在具有该用户名的数据库中找到的第一个租户登录,从而忽略您的TenantSwitch()。
因此,如果您想在您的案例中登录特定的租户,您需要更明确,而是在租户切换后使用Login()操作。
如需详细解释,请使用示例代码,请在27:20分左右开始查看以下深度Master Class on Multi-Tenancy。
答案 1 :(得分:0)
由于OutSystems将用户(和所有实体)分配给特定租户,因此无法立即使用。属于单个租户模块的实体将分配给默认租户。
OutSystems在每个实体上使用一个隐藏的.Tenant_Id属性来指示该用户属于哪个租户。您可以通过以下方式取消隐藏用户实体的属性:单击“更多...”,然后在“高级”选项卡中勾选相关框。然后,您可以直接访问该属性,但是请注意,这将妨碍OutSystems自动执行其做的某些事情以确保您访问租户特定数据的能力。
当您使用User_Login操作时,OutSystems将从User.Tenant_Id属性中推断出要使用哪个租户,而与您先前将其切换到哪个租户无关。用户需要为他们需要使用的每个租户提供一个帐户,但是没有理由在OS不能在幕后完成的情况下,操作系统会在登录前获取正确的用户名。不过,您需要确保他们都保持同步,尤其是c的密码。