从 http 上下文中获取服务堆栈角色

Get servicestack roles from http context

我一直在使用 hangfire 的以下授权过滤器 link 它到 ServiceStack auth:

    public class HangFireAuthorizationFilter : IDashboardAuthorizationFilter
    {
        public bool Authorize(DashboardContext context)
        {
            if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development")
            {
                return true;
            }

            var coreContext = context.GetHttpContext();
            var httpContext = coreContext.ToRequest();
            var session = httpContext.GetSession();

            if (session != null && session.IsAuthenticated && session.Roles != null && session.Roles.Contains("Admin"))
            {
                return true;
            }

            return false;
        }
    }

context.GetHttpContext()returnsDefaultHttpContext。会话具有正确的用户名和 ID,但不包含用户角色。

我在这个项目上使用内置于 login.html 的 ServiceStack 的凭据登录。在我的其他项目中,我使用的是 JWT 身份验证,所以我认为这可能就是为什么它现在不起作用的原因。

使用凭据身份验证时如何从上下文中获取用户角色?

编辑:

在保存的会话中查看数据库,我还可以看到它没有角色 "roles":[]。我正在使用不同的角色 table 并且可以确认此用户有一个具有 Admin 角色的条目。我尝试手动将角色添加到用户身份验证 table 列,但这并没有改变任何东西。

使用HasRole()验证用户是否在角色中,例如:

return session.HasRole(role, httpContext.TryResolve<IAuthRepository>());