using System; using OS.Common.ComUtils; using OS.Common.Encrypt; using OS.Common.Extention; namespace OS.Common.Authrization { /// /// 当前系统访问上下文信息 /// public class MemberShiper { #region 当前应用授权信息 [ThreadStatic] private static SysAuthorizeInfo _appAuthorize; /// /// 应用授权信息 /// public static SysAuthorizeInfo AppAuthorize { get { return _appAuthorize; } } #endregion #region 用户信息 [ThreadStatic] private static MemberInfo _memberInfo; /// /// 登陆用户信息 /// public static MemberInfo MemberInfo { get { return _memberInfo; } } #endregion /// /// 是否已经验证 /// public static bool IsMemberAuthorized { get { return MemberInfo != null && MemberInfo.UserId > 0; } } #region 设置相关信息 /// /// 设置用户信息 /// /// public static void SetMemberInfo(MemberInfo info) { _memberInfo = info; } /// /// 设置应用授权信息 /// /// public static void SetAppAuthrizeInfo(SysAuthorizeInfo info) { _appAuthorize = info; } #endregion #region token 处理 //private static readonly string _encryptKey = ConfigUtil.GetAppSetting("TokenSecretKey"); /// /// 通过 ID 生成对应的Token /// /// /// /// /// /// public static string GetToken(string encryptKey, long userId, long employeeId = 0, bool isEmployee = false) { string sourceData = string.Concat(userId, "|", employeeId, "|", isEmployee, "|", DateTime.Now.ToUtcSeconds()); return AesRijndael.Encrypt(sourceData, encryptKey).Base64UrlEncode(); } /// /// 通过 ID 生成对应的Token /// /// /// /// public static MemberInfo GetTokenDetail(string encryptKey, string token) { string tokenDetail = AesRijndael.Decrypt(token.Base64UrlDecode(), encryptKey); if (string.IsNullOrEmpty(tokenDetail)) throw new ArgumentNullException("token", "不合法的用户Token"); string[] memberIdSplit = tokenDetail.Split('|'); var memberInfo = new MemberInfo(); memberInfo.UserId = memberIdSplit[0].ToInt64(); memberInfo.EmployeeId = memberIdSplit[1].ToInt64(); memberInfo.IsEmployee = memberIdSplit[2].ToBoolean(); return memberInfo; } #endregion } /// /// 授权用户信息 /// public class MemberInfo { /// /// 会员ID /// public long UserId { get; set; } /// /// 员工Id /// public long EmployeeId { get; set; } /// /// 用户姓名 /// public string Name { get; set; } /// /// 用户头像 /// public string Avatar { get; set; } /// /// 是否是后台员工 /// 如果员工以会员身份登录,则UserId 和 EmployeeId 都有值 /// public bool IsEmployee { get; set; } /// /// 用户数据 /// public object MemberData { get; set; } } }