Я новичок в концепции идентичности на основе утверждений, поэтому, если вопрос неясен, дайте мне знать.
У меня есть производная коллекция пользователей, и она относится к коллекции «организаций». Пользователь может быть администратором в связанных организациях.
Я пытаюсь создать возможность иметь атрибут [IsAdminForThisOrg], который будет применяться для таких маршрутов, как:
.../api/Organizations/1/UpdateData
Во-первых, я обдумываю «роли» и «требования». Похоже, что роли были бы лучше, если бы вы были администратором, точка (не считая того факта, что на самом деле ваши административные полномочия применимы только к определенной организации).
Затем, если читать больше, мне кажется, что претензии отлично подходят для того, что я пытаюсь достичь. Я думаю, что при входе в систему я проверю все организации, в которых пользователь является администратором, а затем установлю заявку с помощью string.concat этих значений. Тогда я мог бы построить политику вокруг этого утверждения.
Вопрос 1
Кажется ли мой общий подход к этому разумным?
вопрос 2
Верно ли, что добавление утверждений обычно происходит при входе пользователя в систему? Почему это официальный документ https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims не упоминает о добавлении претензий? Чем это полезно, если вы не добавляете претензии?
Вопрос 3
Как правильно добавлять заявки при входе пользователя в систему? Я немного покопался и переопределяю GenerateClaimsAsync в моем собственном производном UserClaimsPrincipalFactory. Кажется, работает. Но проблема, с которой я столкнулся:
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)
Мне передается пользовательский объект, но мне нужно перейти к связанным данным. У пользователя есть свойство навигации по коллекции для организаций, но оно еще не заполнено из-за того, как работает загрузка EF, я полагаю. Я не знаю, как указать активную или явную загрузку, поскольку у меня нет контекста, и, похоже, это уже было сделано для меня. (Я не знаю, что передает мне объект пользователя в этот метод. 0 Возможно, существует совершенно другой способ заполнения утверждений, который предпочтительнее. Похоже, что документации по этому методу очень мало, так что, возможно, это не способ идти.