zoukankan      html  css  js  c++  java
  • ABP .NET Core 通过 AbpSession 扩展获取 UserName(一)

    这篇文章主要用于记录使用 ABP 过程。下面是这篇文章的主要代码,代码被放在 Core 层,因为是扩展方法所以不是必须放在 Core 层。

        public static class AbpSessions
        {
            private static Dictionary<long?, AbpLoginResult<Tenant, User>> dict;
    
            /// <summary>
            /// 保存登录用户信息
            /// </summary>
            /// <param name="user"></param>
            public static void SaveUserToCache(AbpLoginResult<Tenant, User> user)
            {
                if (dict == null) dict = new Dictionary<long?, AbpLoginResult<Tenant, User>>();
    
                if (!dict.ContainsKey(user.User.Id))
                {
                    dict.Add(user.User.Id, user);
                }
            }
    
            /// <summary>
            /// 获取当前登录用户名
            /// </summary>
            /// <param name="session"></param>
            /// <returns></returns>
            public static string GetUserName(this IAbpSession session)
            {
                return dict.ContainsKey(session.UserId)
                    ? dict[session.UserId].User.UserName
                    : string.Empty;
            }
        }

    在登录的地方调用 SaveUserToCache 将用户登录信息保存起来:

    AbpSessions.SaveUserToCache(loginResult);

    这样我们就可以是所有 AbpSession.GetUserName() 扩展方法获取当前用户的 UserName:

    AbpSession.GetUserName();//获取当前登录用户 UserName

    整个实现就是这样,下面我再将整个过程记录下来,一下都是些废话,可以不用看了。

    最开始通过在网上搜索,找到 记AbpSession扩展实现过程 这篇文章是最想要的结果,但是因为当前我使用的 ABP 项目版本已经升级到 4.0.2,所以一直没有找到文章中的 SignInAsync 方法,直到从官网下载 ABP官网源码 才弄清楚,原来新版是将实现 identity.AddClaim 挪到了框架内部。所以我无法继续使用文中方法来实现扩展属性。

    我首先想到的就是修改当前的源码来实现,这样用来肯定是最好的,并且的确我也这样做了。但是最终我还是选择了通过扩展方法来实现。主要是考虑到以后如果 ABP 框架升级,我不得不去手动将代码更新一遍,这样做太麻烦了,浪费时间。

    如果读者有其他实现方法,欢迎交流。

  • 相关阅读:
    省选测试29
    省选测试28
    省选测试27
    省选测试26
    省选测试25
    最小费用最大流Dinic
    省选测试24
    省选测试23
    省选测试22
    省选测试21
  • 原文地址:https://www.cnblogs.com/fxck/p/13076944.html
Copyright © 2011-2022 走看看