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);
}
}