Расширение 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. или мне нужно найти другого поставщика удостоверений.

Любая помощь будет принята с благодарностью. поскольку я становлюсь очень смущенным.

0 ответов

Другие вопросы по тегам