Asp.net mvc 3 多租户MVC应用程序中的自定义角色Provider

Asp.net mvc 3 多租户MVC应用程序中的自定义角色Provider,asp.net-mvc-3,multi-tenant,roleprovider,Asp.net Mvc 3,Multi Tenant,Roleprovider,我需要为多租户web应用程序开发自定义角色提供程序。 在DB级别,我们有一个将用户与角色与租户关联的表 我的问题是RoleProvider获取用户角色只是将用户作为参数传递,我们需要考虑租户 在RoleProvider实施中,我们有: public override string[] GetRolesForUser(string username) { //Code to retrieve roles from repo } 由于角色针对特定租户中的用户,我们需要: public o

我需要为多租户web应用程序开发自定义角色提供程序。 在DB级别,我们有一个将用户与角色与租户关联的表

我的问题是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类(所有控制器从中继承的类)中

成员资格和角色提供者在一个单独的项目中,因此我看不到使用当前租户的方法。我想我可以在web应用程序项目中创建自定义角色Provider


关于如何实现RoleProvider接口(将租户作为输入的一部分)有什么想法吗

好吧,我只想告诉你我在这件事上做了什么:

由于我们的路由是以
http://[tenantName].[domain]/[App]/[Area]
的形式,我们最终从请求中得到了
[tenantName]
,因为它是唯一的,并且租户和
用户名作为参数,我可以在
UsersInTenants
表中进行选择

使用cookies作为传递传统信息的方式也可以做到这一点

因此,您可以使用cookies访问请求,但就我所研究的而言,在大多数情况下会话尚未初始化


希望有帮助

租户是一个组织,因此,对于每个组织,一个用户都有一组特定的角色。如果其他项目不允许您这样做,您需要将其包装到您的另一个类中。@DarthLoader,我不太明白您的意思,我知道装饰器模式,但由于RoleProvider是由ASP.NET MVC“调用”的,我不知道如何扩展它。你能深化你的回答吗?你有点纠缠不清。您将无法超越GetRolesForUser并添加额外的参数,因为调用链上游将不知道如何使用您的新方法。我想您可以创建自己的RoleProvider,并按照这里的建议修改initalize函数,然后使用依赖注入注入“tennenant”信息。