StackService:抢先用户登录并在登录时分配角色和权限

时间:2017-02-13 11:14:34

标签: authentication servicestack azure-active-directory roles

我正在寻找一种方法来为我知道但尚未登录我的服务的用户分配角色和权限。使用外部身份验证提供程序(aad)完成身份验证。

我一直在清理UserAuth和UserAuthDetails表,然后创建一个最小的UserAuth条目,用于预测我的登录(id,电子邮件,用户名和日期),但在登录时创建了另一个UserAuth条目,以便与新的UserAuthDetails一起使用行。

现在我(逃脱)硬编码角色(和其他元数据)并在OnAuthenticated期间应用它们。在某些时候,我可能不得不不情愿地将其移动到数据库中的表中,以便我可以在运行时添加先发制人的访问分配。

理想情况下,我应该能够使用适当的角色和权限预先创建UserAuth行,这些行预期用户使用与电子邮件匹配的提供程序进行登录。我是否可以通过ServiceStack的扩展机制添加此功能,而无需实际修改底层的AuthenticateService?

1 个答案:

答案 0 :(得分: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);
    }
}
相关问题