2

전자 메일을 알고 있지만 아직 내 서비스에 로그인하지 않은 사용자에게 역할 및 사용 권한을 할당하는 방법을 찾고 있습니다. Auth는 외부 인증 공급자 (aad)를 사용하여 수행됩니다.StackService : 사용자 로그인 선점 및 로그인에 대한 역할 및 사용 권한 할당

UserAuth 및 UserAuthDetails 테이블을 삭제 한 다음 내 로그인 (ID, 이메일, 사용자 이름 및 날짜)을 예상하는 최소한의 UserAuth 항목을 만들었지 만 다른 UserAuth 항목에 로그인하면 새로운 UserAuthDetails 행.

지금은 (그리고 다른 메타 데이터) 하드 코딩 역할을하고 OnAuthenticated 중에 적용하는 중입니다. 어떤 시점에서 나는 이것을 마지 못해 데이터베이스의 테이블로 옮겨야하므로 런타임 중에 선점 액세스 지정을 추가 할 수 있습니다.

전자 메일과 일치하는 공급자를 사용하여 사용자가 로그인 할 것으로 예상되는 적절한 역할 및 사용 권한으로 UserAuth 행을 미리 만들 수 있어야합니다. 기본 AuthenticateService를 실제로 수정하지 않고 ServiceStack의 확장 메커니즘을 통해이 기능을 추가 할 수 있습니까? 당신이 UserAuth 만들 정확히 알고하지 않는

답변

0

, 나는 아직도 OnAuthenticated()에서 수정할 것입니다하지만 당신은 사용자 Email에 대해 당신이에 할당 할 수있는 방법을 생성해야 Role를 나열하는 사용자 정의 CreateRole 테이블을 수있는 소스 예 :

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