2

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

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

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

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

ответ

0

Если вы не знаете точно, что 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); 
    } 
} 
Смежные вопросы