ASP.NET身份验证 - 基于公司筛选角色

3
我有一个网络应用程序,可以保存多个公司的数据(类似于租户),但是用户可以访问多个不同的公司(与Multitenancy的区别)。此外,用户可能对不同的公司拥有不同的访问权限。
例如: 用户A在公司A拥有管理员权限,在公司B只有基本权限。
为了支持这个功能,我已经将公司添加到AspNetUserRoles表中。我想要做的是根据用户登录选择的公司过滤Identity框架返回的角色。
应用程序使用UserManager类的FindByNameAsync方法返回用户对象,但我认为我的集成点更靠后。
实现这个功能的最佳方法是什么,最佳集成点在哪里?
感谢您的帮助。
1个回答

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

  1. Adding multiple roles for one company for e.g. CompanyA_Admin, CompanyA_Basic, CompanyB_Admin, CompanyB_Basic in aspnet_Roles table
  2. Then further get all roles for a given user by System.Web.Security.Roles.GetRolesForUser()
  3. To get all the companies for the user:

    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;
    

    }


谢谢回复。但是我的偏好是不为每个公司创建重复的角色,因为这样我将不得不在代码中授权所有重复的角色。此外,如果添加了新公司,我将不得不遍历所有代码并更新以包括新公司的角色。 - Kay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接