ASP.NET标识 - 根据公司过滤角色

时间:2015-06-11 00:17:29

标签: c# asp.net asp.net-identity multi-tenant

我有一个Web应用程序,可以保存多个公司的数据(例如多租户),但用户可以访问多个公司(与多租户有所不同)。此外,用户可能拥有不同公司的不同访问权限。

例如: 用户A具有公司A的管理员访问权限,仅具有公司B的基本访问权限

为了支持此功能,我已将公司添加到AspNetUserRoles表中。我想要做的是根据为登录用户选择的公司过滤Identity框架返回的角色。

应用程序使用FindByNameAsync类中的UserManager方法返回用户对象,但我认为我的关系点在堆栈中的后面。

实现此功能的最佳方式是什么?最佳搭配点在哪里?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现此功能:

  1. 为一家公司添加多个角色,例如aspA_Roles表中的CompanyA_Admin,CompanyA_Basic,CompanyB_Admin,CompanyB_Basic
  2. 然后通过System.Web.Security.Roles.GetRolesForUser()进一步获取给定用户的所有角色
  3. 为用户提供所有公司:

    string[] CompaniesForUser()
    {
    
    //Change to commented version for production   
    string[] roles = new string[] { "CompanyA_Admin", "CompanyB_Admin", "CompanyA_Basic", "CompanyB_Basic" };  //System.Web.Security.Roles.GetRolesForUser();
    string[] companies = new string[100];
    int index = 0;
    
    foreach(string role in roles)
    {
        string cName =  role.Split('_')[0];
    
        //Only add new companies
        if (!companies.Contains(cName))
        {
            companies[index] = cName;
    
            //Testing
            Response.Write("Index : " + index + " - " + cName + "<br>");
    
            index++;
        }
    }
    
    return companies;
    

    }