我很难把多租户的概念与websecurity (来自微软的head矩阵框架)结合起来。我正在建设一个mutli租户网站,内容包括:
认证
我可以允许用户使用WebSecurity方法注册和登录。我可以验证用户是否已登录/通过User.Identy.IsAuthenticated
进行身份验证。
确定租户
我通过url ([companyname].domain.com
)确定租户。
注册新客户
新客户可以通过我的应用程序中的注册表单创建租户。如果用户注册(在url中没有公司名称),他将不得不提供一些帐户输入作为一些公司的输入。然后,他将创建一个符合companyname.domain.com的新别名。因此,长话短说,租户总是耦合到一个或多个用户(1-N).。
需求
我需要保证租户'abc‘的用户永远无法登录到租户'xyz’。(因此,我也不太喜欢WebSecurity框架,因为它似乎是我所有租户的共享数据库(或者我错了吗?)
我的问题
你们能分享一些关于如何在现实世界多租户应用程序中处理“租户”和“经过身份验证的用户”检查的见解吗?
我最热门的话题是:
如果你能与我分享一些关于这些问题的文档,我会得到很大的帮助。我强烈希望看到更多关于多租户的详细文档,这些文档深入到实际的设计(甚至是代码示例)中。
我已经阅读了大部分的“一般文件”/“商业报告”:
如果需要,我将重新编写/添加代码/做任何需要得到帮助的事情。
在此之前,非常感谢您。
发布于 2013-01-14 13:44:37
您可以获得的每个解决方案都取决于您的应用程序做什么以及它如何处理数据,如果您使用存储库模式,如果您使用IoC等。您可以考虑通过将用户if传递到存储库类并在应用程序需要数据时进行筛选来实例化您的存储库,您可以在您的控制器中这样做--这种方法经常使用(甚至在VS SampleProjects中--比如"SinglePage应用程序“--您可能想下载一些开源项目,看看是如何做到的)。
在我的一些项目中,我所做的并不需要任何“真正花哨”的东西,而且我也不期望会有很大的负载:-我在onActionExecuting事件中设置了每个其他控制器都需要实现的BaseController。
public Employee CurrentEmployee { get; set; }
protected override void OnActionExecuting(ActionExecutingContext ctx)
{
base.OnActionExecuting(ctx);
string authenticatedUser = User.Identity.Name;
CurrentEmployee = mortenDb.Employees.FirstOrDefault(e => e.Account.Login == authenticatedUser );
}
因此,在所有其他控制器中,我能够引用属于当前登录用户的Employee对象。你也可以对你的公司对象做同样的事情。因此,我假设您会像我一样查询员工,检索公司引用并将其传递给您的BaseController上的公共属性。这可能不是最好的解决方案,但只要您记得通过Company对象导航属性提取数据,它就相当安全(例如。无论你在你的模型中拥有什么,员工、票、请求等等)
https://stackoverflow.com/questions/14318511
复制相似问题