【发布时间】:2019-02-08 08:56:35
【问题描述】:
使用 AuthFeature / AuthUserSession 插件,我们可以在每个请求的 PopulateSessionFilter 中使用用户角色、权限等填充会话。
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new CredentialsAuthProvider(AppSettings),
new NetCoreIdentityAuthProvider(AppSettings)
{
PopulateSessionFilter = (session, principal, req) =>
{
//Example of populating ServiceStack Session Roles for EF Identity DB
var userManager = req.TryResolve<UserManager<ApplicationUser>>();
var user = userManager.FindByIdAsync(session.Id).Result;
var roles = userManager.GetRolesAsync(user).Result;
session.Roles = roles.ToList();
}
},
}));
有没有办法根据已配置的内容将其存储在缓存、MemoryCacheClient 或 Redis 中,因此不必在此处进行数据库调用,或者是在 userManager 本身(或任何存储库)中实现缓存解决方案的情况编写代码来获取此信息)?
【问题讨论】:
-
与forums.servicestack.net/t/… 类似,但我希望避免添加到 JWT 令牌中。
-
看起来我可以使用 HostContext.TryResolve
() 来获取缓存。 -
这样就可以访问注册的缓存客户端,也可以使用
req.GetMemoryCacheClient()或req.TryResolve<MemoryCacheClient>()访问本地内存缓存客户端。
标签: servicestack