3

新しいユーザーが登録されたときに、役割と権限を追加しようとしています。セッションの役割と権限を追加してもデータベースに保持されないという問題が発生しています。

カスタムAuthUserSessionを作成し、 OnAuthenticatedをオーバーライドしました。

以下のコードはAssignRolesServiceを使用しており、1 つの問題を除いて、まさに私が必要としているものと思われます。認証が 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);
4

1 に答える 1

4

こんにちは、私はちょうどそれを理解しました!

偶然にも、値を割り当てようとしているときに try / catch を持つ LoadUserInfo を使用している場合、null 参照例外を非表示にして、再スローを行わずにリダイレクトを実行します。

次のような新しいリストを作成するだけで修正されました。

 userSession.Roles = new List<string> {"your-role-here"};
于 2013-08-22T04:30:13.540 に答える