2

我正在尋找一種方法將角色和權限分配給我知道但尚未登錄到我的服務的用戶。 Auth使用外部認證提供程序(aad)完成。StackService:搶先登錄用戶併爲其分配角色和權限

我玩過清除UserAuth和UserAuthDetails表,然後創建一個預期我的登錄名(ID,電子郵件,用戶名和日期)的最低UserAuth條目,但是在登錄時創建另一個UserAuth條目以與新條目UserAuthDetails行。

現在,我(脫身)硬編碼角色(和其他元數據)並在OnAuthenticated期間應用它們。在某些時候,我可能不得不不情願地將它移到數據庫中的表中,這樣我可以在運行時添加先佔式訪問分配。

理想情況下,我應該可以預先創建UserAuth行,並使用適當的角色和權限來預測用戶使用與電子郵件相匹配的提供者登錄。我是否可以通過ServiceStack的擴展機制添加此功能,而無需實際修改底層的AuthenticateService?

回答

0

除非你確切地知道USERAUTH創造,我還是會修改他們OnAuthenticated()但你可以從一個自定義CreateRole表列出應該針對用戶Email創建這樣你可以把它分配給Role其中源他們在進行身份驗證時,例如:

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