【发布时间】:2012-10-31 02:44:17
【问题描述】:
我需要为 MultiTenant Web 应用程序开发自定义 RoleProvider。 在数据库级别,我们有一个将用户与角色与租户相关联的表。
我的问题是 RoleProvider 获取用户角色只是将用户作为参数传递,我们需要将租户考虑在内。
在 RoleProvider 实现中,我们有:
public override string[] GetRolesForUser(string username)
{
//Code to retrieve roles from repo
}
由于角色适用于特定租户中的用户,我们需要:
public override string[] GetRolesForUser(string username, int tenantId)
{
//Code to retrieve roles from repo
}
当前租户存储在 ControllerBase 类中(所有控制器都继承自该类)。
Membership 和 Role Providers 在一个单独的项目中,所以我看不到使用当前租户的方法。我想我可以在 web 应用项目中创建我的自定义 RoleProvider。
关于如何实现将租户作为输入的一部分的 RoleProvider 接口的任何想法?
【问题讨论】:
-
租户是一个组织,因此,对于每个组织,用户都有一组特定的角色。
-
你需要的基本上是一个装饰器模式。如果另一个项目不允许你这样做,你需要将它包装在你的另一个类中。
-
@DarthVader,我真的不明白你说什么,我知道装饰器模式,但由于 RoleProvider 是由 ASP.NET MVC“调用”的,我不知道如何扩展它.你会这么好心加深你的答案吗?
-
你有点陷入困境。您将无法覆盖 GetRolesForUser 并添加其他参数,因为调用链上游将不知道使用您的新方法。我想您可以创建自己的 RoleProvider 并按照此处的建议修改 initalize 函数stackoverflow.com/questions/1551503/… 并使用依赖注入来注入“tennenant”信息。
标签: asp.net-mvc-3 multi-tenant roleprovider