Расширение Identity 2.1 для назначения пользователя компании и ролей пользователям
Хорошо, теперь я действительно потерян,
У меня есть приложение, которое отлично работает, у меня есть группы данных, которые доступны для подписки компании. Когда пользователь входит в систему, он может получить доступ к информации из данных, разрешенных его ролями. Если у него есть несколько ролей, он имеет доступ к нескольким областям. отчетов, если они подписаны только на одну роль, у них есть доступ только к этой области. теперь все данные одинаковы и обновляются ежедневно, поэтому, если 100 пользователей подписаны на роли 1,3 и 5, они могут получить доступ к этим данным. В течение последнего десятилетия пользователи компаний использовали один логин для доступа к данным (один логин, предоставленный компании для Джорджа, но Лиза, Джон, Джерри и Боб используют учетные данные Джорджа для загрузки отчетов). Обратите внимание, что данные не меняются для каждой компании, и сайт не меняется для каждой компании, все данные и темы являются частью одного сайта, к которому у них есть доступ.
Теперь вопрос.
Многие из моих пользователей (компаний, которые имеют доступ к моим данным) спросили меня, что они хотели бы иметь возможность добавлять пользователей в свою учетную запись, чтобы они могли отслеживать, кто загружает какой отчет, когда я взимаю плату за подписку на 500, 1000 и 2000 отчеты. Мое приложение регистрирует загруженные отчеты, и пользователь может просматривать эти отчеты со своего пользовательского портала и идентификатора, который их загрузил. проблема в том, что компании хотят иметь возможность администрировать своих собственных пользователей, вроде администратора учетной записи. Я рассмотрел мультитенант, и это не совсем соответствует моим потребностям, но из того, что я смотрю, я чувствую, что мне нужно добавить company_id в роли пользователя и user_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. или мне нужно найти другого поставщика удостоверений.
Любая помощь будет принята с благодарностью. поскольку я становлюсь очень смущенным.