StackService: предотвращение входа пользователей в систему и назначение ролей и разрешений при входе в систему.

Я ищу способ назначения ролей и разрешений пользователю, чья электронная почта мне известна, но еще не вошла в мою службу. Проверка подлинности выполняется с использованием внешних поставщиков проверки подлинности (aad).

Я поиграл с очисткой таблиц UserAuth и UserAuthDetails, а затем создал минимальную минимальную запись UserAuth, которая предвосхищает мой логин (идентификатор, адрес электронной почты, имя пользователя и даты), но после входа в систему была создана другая запись UserAuth, соответствующая новой строке UserAuthDetails.

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

В идеале я должен иметь возможность предварительно создавать строки UserAuth с соответствующими ролями и разрешениями, которые предполагают, что пользователи будут входить в систему с помощью поставщика, соответствующего электронной почте. Могу ли я добавить эту функциональность с помощью механизмов расширения ServiceStack, фактически не изменяя базовый AuthenticateService?

1 ответ

Решение

Если вы точно не знаете, что создать UserAuth, я бы все равно изменил их в OnAuthenticated() но вы можете получить их из обычая CreateRole таблица, в которой перечислены Role что должно быть создано против пользователей Email таким образом вы можете назначить его им при аутентификации, например:

public override void OnAuthenticated(IServiceBase authService, 
    IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
{
    using (var db = authService.TryResolve<IDbConnectionFactory>().Open())
    {
        var q = db.From<CreateRole>().Where(x => x.Email == session.Email);
        var userRoles = db.Column<string>(q.Select(x => x.Role));

        var authRepo = authService.TryResolve<IAuthRepository>();
        var userAuth = authRepo.GetUserAuth(session, tokens);
        authRepo.AssignRoles(userAuth, roles: userRoles);
    }
}
Другие вопросы по тегам