【问题标题】:Custom RoleProvider in a MultiTenant MVC App多租户 MVC 应用程序中的自定义 RoleProvider
【发布时间】: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


【解决方案1】:

好吧,只是为了告诉你我在我的情况下做了什么:

由于我们的路线采用http://[tenantName].[domain]/[App]/[Area] 的形式,我们最终从请求中获得了[tenantName],因为它是唯一的,并且使用作为参数的租户和UserName,我可以进行选择在我们的UsersInTenants' 桌子上。

同样可以使用 cookie 作为传递附加信息的一种方式。

因此,您可以使用 cookie 访问请求,但据我研究,大多数情况下 Session 尚未初始化。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2011-12-14
    相关资源
    最近更新 更多