2013-07-18 52 views
3

我想添加新用户注册时的角色和权限。我遇到了将会话角色和权限添加到数据库中的问题。ServiceStack添加角色和权限与自定义AuthUserSession

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

下面的代码使用AssignRolesService,这似乎是我需要的除了一个问题。当身份验证由Facebook身份验证提供程序会话处理时。用户身份名称为空,因此我无法调用该服务。

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

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

这样的建议方式(从我发现SO /谷歌):

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

您是否通过使用会话用户找到解决方案? –

回答

3

嗨,我只是想通了!

如果只是你使用LoadUserInfo有,当你试图分配值,隐藏着一个空引用异常和做重定向而不做一个try/catch AA巧合再次引发

,进行了通过创建一个像这样的新列表来修复:

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

试过在OnAuthenticated覆盖...没有骰子:/ –

+0

这是一个旧帖子,如果我能记得的话,那是servicestack 3.x –