ServiceStack 使用自定义 AuthUserSession 添加角色和权限

标签 servicestack

我正在尝试在注册新用户时添加角色和权限。我遇到了一个问题,即添加到 session 的角色和权限不会持久保存到数据库中。

我编写了一个自定义 AuthUserSession 并覆盖了 OnAuthenticated

下面的代码使用了 AssignRolesService,这似乎正是我所需要的,除了一个问题。当 Facebook 身份验证提供商处理身份验证时,session.UserAuthName 为空,因此我无法调用该服务。

为了澄清,下面的所有代码片段都包含在:

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, 
            IOAuthTokens tokens, Dictionary<string, string> authInfo)

建议的方法(来 self 在 SO/Google 上找到的):

using (var assignRoles = authService.ResolveService<AssignRolesService>())
{
    assignRoles.Post(new AssignRoles {
        UserName = session.UserAuthName,
        Roles = { RoleNames.Admin }
    });
}

也试过这个但是没用:

session.Roles.Add("user");
session.Permissions.Add("setup");
authService.SaveSession(session);

我发现唯一似乎有效但看起来像 hack 的是:

UserAuth ua = db.GetById<UserAuth>(session.UserAuthId);
ua.UserName = user.Email;
ua.Roles.Add("user");
ua.Permissions.Add("setup");
db.Save(ua);

最佳答案

嗨,我刚刚弄明白了!

如果只是巧合,当您尝试分配值时,您使用的 LoadUserInfo 有一个 try/catch,隐藏空引用异常并在不重新抛出的情况下进行重定向

仅通过像这样创建一个新列表就可以解决这个问题:

 userSession.Roles = new List<string> {"your-role-here"};

关于ServiceStack 使用自定义 AuthUserSession 添加角色和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17715011/

相关文章:

c# - 如何配置 Ninject 与 ServiceStack.net 一起工作

servicestack - 使用 JsonSerializer 删除 JSON 响应中的具体 __type 信息

c# - 将通用对象转换为类型化对象

c# - ServiceStack 是如何处理并发调用的?

servicestack - Servicestack References 与 ForeignKey 中的数据注释

sqlite - Servicestack-在SQLite32数据库上按日期查询OrmLite不会返回任何结果

c# - 将Web服务迁移到.NET Core 2.0并返回json

c# - 服务堆栈在过滤器中杀死一个 HTTP 请求

amazon-dynamodb - PocoDynamo - 使用现有表

c# - 如何在 ServiceStack 中实现 Quartz