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 取得,为了让代码看起来更协调,所以在这里也放一个。

  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/fxck/p/13076880.html
Copyright © 2011-2022 走看看