从 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>());
我一直在使用 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>());