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