【问题标题】:ServiceStack adding roles and permissions with custom AuthUserSessionServiceStack 使用自定义 AuthUserSession 添加角色和权限
【发布时间】:2013-07-18 05:13:50
【问题描述】:

我正在尝试在注册新用户时添加角色和权限。我遇到了添加到会话角色和权限的问题不会持久化到数据库中。

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

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

为了澄清,下面的所有代码sn-ps都包含在:

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

建议的执行方式(来自我在 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);

【问题讨论】:

  • 你有没有通过使用会话用户找到解决方案?

标签: servicestack


【解决方案1】:

您好,我刚刚想通了!

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

只需像这样创建一个新列表即可解决此问题:

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

【讨论】:

  • 在 OnAuthenticated 覆盖中尝试过...没有骰子:/
  • 这是一篇旧帖子,如果我记得的话,那是 servicestack 3.x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2021-11-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多