Идентификатор ядра ASP.net 2.0: правильный способ использования идентификатора утверждений с поиском в базе данных?

Я новичок в концепции идентичности на основе утверждений, поэтому, если вопрос неясен, дайте мне знать.

У меня есть производная коллекция пользователей, и она относится к коллекции «организаций». Пользователь может быть администратором в связанных организациях.

Я пытаюсь создать возможность иметь атрибут [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 Возможно, существует совершенно другой способ заполнения утверждений, который предпочтительнее. Похоже, что документации по этому методу очень мало, так что, возможно, это не способ идти.




Ответы (1)


Вы, вероятно, уже каким-то образом это поняли, но вот моя мысль: вы можете взять dbcontext в качестве параметра конструктора (внедрение зависимостей) для своего собственного UserClaimsPrincipalFactory, а затем запросить необходимые организации на основе полученного пользователя.

person Riikka Heikniemi    schedule 13.06.2018