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

时间:2013-07-18 05:13:51

标签: servicestack

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

我写过自定义 AuthUserSession 并覆盖 OnAuthenticated

下面的代码使用了 AssignRolesService ,这看起来就像我需要的那样,除了一个问题。当Facebook身份验证提供程序处理身份验证时 session.UserAuthName 为空,因此我无法调用该服务。

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

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);

我发现的唯一的东西似乎有用,但似乎是黑客:

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

1 个答案:

答案 0 :(得分:4)

嗨,我刚想通了!

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

只需创建一个新的List就可以解决这个问题:

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