src/DotNetCommon.Core/User.cs
(开头部分) 14KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using DotNetCommon.Extensions;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DotNetCommon
{
/// <summary>
/// 登录用户信息
/// </summary>
/// <remarks>
/// 该对象储存三类信息:<para></para>
/// <list type="bullet">
/// <item>IdString:用户Id字符串,使用string类型表示,可兼容int/long/string/guid等key值,需要在程序启动时注入获取逻辑,参照:<seealso cref="User.RegisterIdString(Func{string}, bool)"/></item>
/// <item>IsAuthenticated:用户是否登录,默认如果IdString为空则返回false,否则返回true,如果需要自定义,请调用:<seealso cref="User.RegisterIsAuthenticated(Func{bool}, bool)"/>;</item>
/// <item>Properties:与用户关联的其他属性,需要注入属性容器字典,参照:<seealso cref="User.RegisterPropertiesDictionary(Func{IDictionary{object, object}}, bool)"/>;</item>
/// </list>
/// 使用示例:<para></para>
/// 首先,在StartUp.cs的Configure中注入逻辑:<para></para>
/// DotNetCommon.User.RegisterIdString(() => httpContextAccessor.HttpContext.User.Identity.Name);<para></para>
/// DotNetCommon.User.RegisterIsAuthenticated(() => httpContextAccessor.HttpContext.User.Identity.IsAuthenticated);<para></para>
/// DotNetCommon.User.RegisterPropertiesDictionary(() => (httpContextAccessor.HttpContext?.Items) ?? new Dictionary<object, object>());<para></para>
/// 然后,在业务代码中使用:<para></para>
/// var id=DotNetCommon.User.Current.IdString.To<long>();<para></para>
/// var isAuth=DotNetCommon.User.Current.IsAuthenticated;<para></para>
/// DotNetCommon.User.Current.SetProperty("age", age);<para></para>
/// </remarks>
public class User
{
private User()
{
UserCreated?.Invoke(this);
}
/// <summary>
/// 用户创建事件
/// </summary>
public static event Action<User> UserCreated;
//异步上下文中保存用户属性
private static AsyncLocal<User> _asyncUser = new AsyncLocal<User>();
/// <summary>
/// 当前登录用户信息
/// </summary>
public static User Current
{
get
{
_asyncUser.Value = _asyncUser.Value ?? new User();
return _asyncUser.Value;
}
}
#region 用户IsAuthenticated
private static bool _isCacheAuthenticated = false;
private static Func<bool> _isAuthenticated;
后面还有 328 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
