我有一个Web应用程序,可以保存多个公司的数据(例如多租户),但用户可以访问多个公司(与多租户有所不同)。此外,用户可能拥有不同公司的不同访问权限。
例如: 用户A具有公司A的管理员访问权限,仅具有公司B的基本访问权限
为了支持此功能,我已将公司添加到AspNetUserRoles
表中。我想要做的是根据为登录用户选择的公司过滤Identity框架返回的角色。
应用程序使用FindByNameAsync
类中的UserManager
方法返回用户对象,但我认为我的关系点在堆栈中的后面。
实现此功能的最佳方式是什么?最佳搭配点在哪里?
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以通过以下方式实现此功能:
为用户提供所有公司:
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;
}