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

    private static Dictionary<long?, User> dict;//保存用户信息,减少请求次数
    
    /// <summary>
    /// 保存登录用户信息
    /// </summary>
    /// <param name="user"></param>
    public void SaveUserToCache(User user)
    {
        if (dict == null) dict = new Dictionary<long?, User>();
        if (!dict.ContainsKey(user.Id))
        {
            dict.Add(user.Id, user);
        }
    }
    
    /// <summary>
    /// 获取当前登录用户信息
    /// </summary>
    /// <returns></returns>
    public User GetUser()
    {
        var userId = AbpSession.UserId;
        if (dict != null && dict.ContainsKey(userId))
            return dict[userId];
    
        var user = AsyncHelper.RunSync(() => GetUserByIdAsync(userId.Value));
        SaveUserToCache(user);
    
        return user;
    }
    
    /// <summary>
    /// 获取登录用户标识
    /// </summary>
    public long? UserId { get { return AbpSession.UserId; } }
    
    /// <summary>
    /// 获取登录用户名
    /// </summary>
    /// <returns></returns>
    public string UserName { get { return GetUser()?.UserName; } }

    上面代码在 Authorization.Users.UserManager.cs 类中用户信息被存在 dict 静态变量中。用户登录时调用 SaveUserToCache 将信息保存起来(这样做还有一个好处,当服务重启后,依然可以继续使用而不需要重新登录)。

    在需要调用的地方将 UserManager 注入,就可以通过 UserManager 的实例访问到 UserName 和 UserId 属性,例如:

    entity.CreatorUserName = userManager.UserName;

    注:UserId 本来可以直接通过 AbpSession.UserId 取得,为了让代码看起来更协调,所以在这里也放一个。

  • 相关阅读:
    gcc编译器如何生成指定的文件名
    文章如何做伪原创 SEO大神教你几招做"原创"网站文章的心得
    linux命令大全
    SDC文件模版
    lwip:网络数据包读取和解析过程
    离散时间信号与系统
    网络编程杂谈
    TCP segment of a reassembled PDU
    gdb: multiple process debug
    ntp.conf:很少有人提及的事
  • 原文地址:https://www.cnblogs.com/fxck/p/13076880.html
Copyright © 2011-2022 走看看