我正在尝试在注册新用户时添加角色和权限。我遇到的问题是添加到会话角色和权限不会持久化到数据库中。
我写了一个自定义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);