好的,我现在真的迷失了,
我有一个运行良好的应用程序,我有公司订阅可用的数据组。当用户登录时,他们可以从他们的角色允许的数据中访问信息,如果他们有多个角色,他们可以访问对于多个报告领域,如果他们只订阅一个角色,他们只能访问该区域。现在所有数据都是相同的并且每天更新,因此如果100个用户订阅角色1,3和5,他们就可以访问该数据。在过去十年中,公司的用户将使用一次登录来访问数据(一次登录提供给George公司,但Lisa,john,Jerry和bob都使用George的凭据来下载报告)。请注意,每个公司的数据不会发生变化,并且每个公司的网站都不会更改,所有数据和主题都是他们有权访问的网站的一部分。
现在问题。
我的许多用户(访问我的数据的公司)已经要求我们希望能够将用户添加到他们的帐户中,以便他们可以监控谁正在下载哪些报告,因为我收取500,1000的订阅费用和2000年的报告。我的应用程序记录下载的报告,用户可以从用户门户查看这些报告以及下载它的ID。问题是公司希望能够管理自己的用户,有点像帐户管理员。我已经研究过多租户了,这并不适合我的需求,但是从我正在看的内容我觉得我需要为用户和company_id用户角色添加一个company_id 所以每个公司都可以拥有一个管理员角色和用户角色。但不确定,因为我学习和阅读更多关于这一点,我看到了不同的想法。但是没有真正看到一个对我有用的东西。
这是一个例子。
每个用户(公司)都有很多用户,该公司的每个用户都有管理员或用户的角色。用户(公司)可以访问角色允许的许多区域,并且该公司的用户可以访问公司角色提供的报告。 (或查看他们所属的所有群组的汇总数据)。
考虑将此添加到IdentityModels:
public class ApplicationUserRole : IdentityUserRole<string>
{
public string CompanyId { get; set; }
}
public class ApplicationUser : IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>//, IAppUser
{
public ApplicationUser()
{
this.Id = Guid.NewGuid().ToString();
}
public virtual string CompanyId { get; set; }
public virtual List<CompanyEntity> Company { get; set; }
public DateTime CreatedOn { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
return userIdentity;
}
}
添加到IdentityConfig:
public string GetCurrentCompanyId(string userName)
{
var user = this.FindByName(userName);
if (user == null)
return string.Empty;
var currentCompany = string.Empty;
if (user.Claims.Count > 0)
{
currentCompany = user.Claims.Where(c => c.ClaimType == ConcordyaPayee.Core.Common.ConcordyaClaimTypes.CurrentCompanyId).FirstOrDefault().ClaimValue;
}
else
{
currentCompany = user.CurrentCompanyId;
}
return currentCompany;
}
public override Task<IdentityResult> AddToRoleAsync(string userId, string role, string companyId)
{
return base.AddToRoleAsync(userId, role);
}
现在我不确定这个,我是否需要创建一个新的用户存储。以及如何进行身份验证,我是否需要编写新的授权属性。我应该使用索赔吗?或者可能是ACL系统。或者我是否需要找到不同的身份提供者。
任何帮助都将受到极大的赞赏。因为我很困惑。