添加项目文件。
This commit is contained in:
48
HT.Cloud.Code/Operator/OperatorModel.cs
Normal file
48
HT.Cloud.Code/Operator/OperatorModel.cs
Normal file
@ -0,0 +1,48 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2016 HT.Cloud.Framework 版权所有
|
||||
* Author: HT.Cloud
|
||||
* Description: WaterCloud快速开发平台
|
||||
* Website:
|
||||
*********************************************************************************/
|
||||
|
||||
using System;
|
||||
|
||||
namespace HT.Cloud.Code
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前用户信息
|
||||
/// </summary>
|
||||
public class OperatorModel
|
||||
{
|
||||
public string UserId { get; set; }
|
||||
public string UserCode { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public string UserPwd { get; set; }
|
||||
public string CompanyId { get; set; }
|
||||
public string OrganizeId { get; set; }
|
||||
public string RoleId { get; set; }
|
||||
public string LoginIPAddress { get; set; }
|
||||
public string LoginIPAddressName { get; set; }
|
||||
public string LoginToken { get; set; }
|
||||
public DateTime LoginTime { get; set; }
|
||||
|
||||
//超管
|
||||
public bool IsSuperAdmin { get; set; }
|
||||
|
||||
public bool IsAdmin { get; set; }
|
||||
public bool IsBoss { get; set; }
|
||||
public bool IsSenior { get; set; }
|
||||
public bool IsLeaderInDepts { get; set; }
|
||||
public bool IsSaleman { get; set; }
|
||||
|
||||
// 拓展字段,2019-03-03
|
||||
public string DdUserId { get; set; }
|
||||
|
||||
public string WxOpenId { get; set; }
|
||||
public string Avatar { get; set; }
|
||||
public string loginMark { get; set; }
|
||||
|
||||
//扩展字段 数据库序号,2021-05-12
|
||||
public string DbNumber { get; set; }
|
||||
}
|
||||
}
|
395
HT.Cloud.Code/Operator/OperatorProvider.cs
Normal file
395
HT.Cloud.Code/Operator/OperatorProvider.cs
Normal file
@ -0,0 +1,395 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2016 HT.Cloud.Framework 版权所有
|
||||
* Author: HT.Cloud
|
||||
* Description: WaterCloud快速开发平台
|
||||
* Website:
|
||||
*********************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HT.Cloud.Code
|
||||
{
|
||||
public class OperatorProvider
|
||||
{
|
||||
//是否允许一个账户在多处登录
|
||||
private static bool LoginMultiple = GlobalContext.SystemConfig.LoginMultiple;
|
||||
|
||||
//缓存过期时间
|
||||
private static int LoginExpire = GlobalContext.SystemConfig.LoginExpire;
|
||||
|
||||
private static string projectPrefix = GlobalContext.SystemConfig.ProjectPrefix;
|
||||
|
||||
public static OperatorProvider Provider
|
||||
{
|
||||
get { return new OperatorProvider(); }
|
||||
}
|
||||
|
||||
//watercloud_operator_pc_ PC端登录
|
||||
//watercloud_operator_info_ 登录次数
|
||||
//
|
||||
/// <summary>
|
||||
/// 缓存操作类
|
||||
/// </summary>
|
||||
private string cacheKeyOperator = projectPrefix + "_operator_";// +登录者token
|
||||
|
||||
private string cacheKeyToken = projectPrefix + "_token_";// +登录者token
|
||||
private string cacheKeyError = projectPrefix + "_error_";// + Mark
|
||||
|
||||
/// <summary>
|
||||
/// 秘钥
|
||||
/// </summary>
|
||||
private string LoginUserToken = projectPrefix + "_Token";
|
||||
|
||||
/// <summary>
|
||||
/// 标记登录的浏览器
|
||||
/// </summary>
|
||||
private string LoginUserMarkKey = projectPrefix + "_Mark";
|
||||
|
||||
public string GetProvider(string key)
|
||||
{
|
||||
var token = GetToken();
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
return token;
|
||||
token = WebHelper.GetCookie(key).ToString();
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
return token;
|
||||
return WebHelper.GetSession(key).ToString();
|
||||
}
|
||||
|
||||
public void SetProvider(string key, string value)
|
||||
{
|
||||
WebHelper.WriteCookie(key, value);
|
||||
WebHelper.WriteSession(key, value);
|
||||
}
|
||||
|
||||
public string GetToken()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (GlobalContext.HttpContext == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
//查请求头
|
||||
string token = GlobalContext.HttpContext.Request.Headers[GlobalContext.SystemConfig.TokenName].ParseToString();
|
||||
if (!String.IsNullOrEmpty(token)) return token;
|
||||
|
||||
//查参数
|
||||
token = GlobalContext.HttpContext.Request.Query[GlobalContext.SystemConfig.TokenName];
|
||||
if (!String.IsNullOrEmpty(token)) return token;
|
||||
|
||||
//查cookies
|
||||
string cookie = GlobalContext.HttpContext.Request.Cookies[GlobalContext.SystemConfig.TokenName];
|
||||
return cookie == null ? string.Empty : cookie;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveProvider(string key)
|
||||
{
|
||||
WebHelper.RemoveCookie(key);
|
||||
WebHelper.RemoveSession(key);
|
||||
}
|
||||
|
||||
public OperatorModel GetCurrent()
|
||||
{
|
||||
OperatorModel operatorModel = new OperatorModel();
|
||||
try
|
||||
{
|
||||
string loginMark = GetProvider(LoginUserMarkKey);
|
||||
operatorModel = CacheHelper.Get<OperatorModel>(cacheKeyOperator + loginMark);
|
||||
}
|
||||
catch
|
||||
{
|
||||
operatorModel = null;
|
||||
}
|
||||
return operatorModel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取浏览器设配号
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string GetMark()
|
||||
{
|
||||
string cookieMark = GetProvider(LoginUserMarkKey);
|
||||
if (string.IsNullOrEmpty(cookieMark))
|
||||
{
|
||||
cookieMark = Guid.NewGuid().ToString();
|
||||
SetProvider(LoginUserMarkKey, cookieMark);
|
||||
}
|
||||
return cookieMark;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 登录者信息添加到缓存中
|
||||
/// </summary>
|
||||
/// <param name="userEntity">用户</param>
|
||||
/// <param name="loginMark">设备标识uid</param>
|
||||
/// <param name="facilityMark">设备类型</param>
|
||||
/// <param name="cookie">是否保存cookie,默认是</param>
|
||||
/// <returns></returns>
|
||||
public async Task<string> AddLoginUser(OperatorModel operatorModel, string loginMark, string facilityMark)
|
||||
{
|
||||
string token = Guid.NewGuid().ToString();
|
||||
try
|
||||
{
|
||||
// 填写登录信息
|
||||
operatorModel.LoginToken = token;
|
||||
//登录信息更新
|
||||
if (string.IsNullOrEmpty(loginMark))
|
||||
{
|
||||
string cookieMark = GetProvider(LoginUserMarkKey);
|
||||
if (string.IsNullOrEmpty(cookieMark))
|
||||
{
|
||||
operatorModel.loginMark = Guid.NewGuid().ToString();
|
||||
SetProvider(LoginUserMarkKey, operatorModel.loginMark);
|
||||
}
|
||||
else
|
||||
{
|
||||
operatorModel.loginMark = cookieMark;
|
||||
}
|
||||
SetProvider(LoginUserToken, token);
|
||||
}
|
||||
else
|
||||
{
|
||||
operatorModel.loginMark = loginMark;
|
||||
RemoveProvider(LoginUserMarkKey);
|
||||
}
|
||||
//redis 登录token列表更新
|
||||
Dictionary<string, string> tokenMarkList = await CacheHelper.GetAsync<Dictionary<string, string>>(cacheKeyToken + operatorModel.UserId);
|
||||
if (tokenMarkList == null)// 此账号第一次登录
|
||||
{
|
||||
tokenMarkList = new Dictionary<string, string>();
|
||||
tokenMarkList.Add(operatorModel.loginMark, token);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tokenMarkList.ContainsKey(operatorModel.loginMark))
|
||||
{
|
||||
tokenMarkList[operatorModel.loginMark] = token;
|
||||
}
|
||||
else
|
||||
{
|
||||
tokenMarkList.Add(operatorModel.loginMark, token);
|
||||
}
|
||||
}
|
||||
|
||||
await CacheHelper.SetAsync(cacheKeyToken + operatorModel.UserId, tokenMarkList);
|
||||
await CacheHelper.SetAsync(cacheKeyOperator + operatorModel.loginMark, operatorModel, LoginExpire);
|
||||
await CacheHelper.RemoveAsync(cacheKeyOperator + facilityMark + operatorModel.UserId);
|
||||
await CacheHelper.SetAsync(cacheKeyOperator + facilityMark + operatorModel.UserId, token, LoginExpire);
|
||||
return token;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清空当前登录信息
|
||||
/// </summary>
|
||||
/// <param name="apitoken">apitoken</param>
|
||||
/// <param name="facilityMark">设备类型</param>
|
||||
public async Task EmptyCurrent(string facilityMark)
|
||||
{
|
||||
try
|
||||
{
|
||||
string token = GetProvider(LoginUserToken);
|
||||
string loginMark = GetProvider(LoginUserMarkKey);
|
||||
await EmptyCurrent(token, facilityMark, loginMark);
|
||||
RemoveProvider(LoginUserMarkKey.Trim());
|
||||
RemoveProvider(LoginUserToken.Trim());
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清空当前登录信息
|
||||
/// </summary>
|
||||
/// <param name="token">登录票据</param>
|
||||
/// <param name="facilityMark">登录设备</param>
|
||||
/// <param name="loginMark">登录设备标识</param>
|
||||
public async Task EmptyCurrent(string token, string facilityMark, string loginMark)
|
||||
{
|
||||
try
|
||||
{
|
||||
OperatorModel operatorInfo = await CacheHelper.GetAsync<OperatorModel>(cacheKeyOperator + loginMark);
|
||||
if (operatorInfo != null)
|
||||
{
|
||||
Dictionary<string, string> tokenMarkList = await CacheHelper.GetAsync<Dictionary<string, string>>(cacheKeyToken + operatorInfo.UserId);
|
||||
tokenMarkList.Remove(loginMark);
|
||||
await CacheHelper.RemoveAsync(cacheKeyOperator + loginMark);
|
||||
if (operatorInfo.LoginToken == token || facilityMark == "api_")
|
||||
{
|
||||
await CacheHelper.RemoveAsync(cacheKeyOperator + facilityMark + operatorInfo.UserId);
|
||||
}
|
||||
await CacheHelper.SetAsync(cacheKeyToken + operatorInfo.UserId, tokenMarkList);
|
||||
await CacheHelper.RemoveAsync(facilityMark + GlobalContext.SystemConfig.TokenName + "_" + operatorInfo.UserId + "_" + operatorInfo.LoginTime);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断登录状态
|
||||
/// </summary>
|
||||
/// <param name="facilityMark">登录设备</param>
|
||||
/// <param name="apitoken">apitoken</param>
|
||||
/// <returns>-1未登录,1登录成功,0登录过期,-2账号被顶</returns>
|
||||
public async Task<OperatorResult> IsOnLine(string facilityMark)
|
||||
{
|
||||
try
|
||||
{
|
||||
string token = GetProvider(LoginUserToken);
|
||||
string loginMark = GetProvider(LoginUserMarkKey);
|
||||
return await IsOnLine(token, facilityMark, loginMark);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return new OperatorResult { stateCode = -1 };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断登录状态
|
||||
/// </summary>
|
||||
/// <param name="token">登录票据</param>
|
||||
/// <param name="facilityMark">登录设备</param>
|
||||
/// <param name="loginMark">登录设备标识</param>
|
||||
/// <returns>-1未登录,1登录成功,0登录过期,-2账号被顶</returns>
|
||||
public async Task<OperatorResult> IsOnLine(string token, string facilityMark, string loginMark)
|
||||
{
|
||||
OperatorResult operatorResult = new OperatorResult();
|
||||
operatorResult.stateCode = -1; // -1未登录,1登录成功,0登录过期
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(loginMark))
|
||||
{
|
||||
return operatorResult;
|
||||
}
|
||||
OperatorModel operatorInfo = await CacheHelper.GetAsync<OperatorModel>(cacheKeyOperator + loginMark);
|
||||
if (operatorInfo != null)
|
||||
{
|
||||
Dictionary<string, string> tokenMarkList = await CacheHelper.GetAsync<Dictionary<string, string>>(cacheKeyToken + operatorInfo.UserId);
|
||||
if ((token == operatorInfo.LoginToken || facilityMark == "api_") && tokenMarkList.ContainsKey(operatorInfo.loginMark) && tokenMarkList[operatorInfo.loginMark] == operatorInfo.LoginToken)
|
||||
{
|
||||
////账号被顶(排除admin)
|
||||
if (!LoginMultiple && !operatorInfo.IsSuperAdmin && operatorInfo.LoginToken != await CacheHelper.GetAsync<string>(cacheKeyOperator + facilityMark + operatorInfo.UserId))
|
||||
{
|
||||
operatorResult.stateCode = -2;
|
||||
tokenMarkList = await CacheHelper.GetAsync<Dictionary<string, string>>(cacheKeyToken + operatorInfo.UserId);
|
||||
tokenMarkList.Remove(loginMark);
|
||||
await CacheHelper.SetAsync(cacheKeyToken + operatorInfo.UserId, tokenMarkList);
|
||||
await CacheHelper.RemoveAsync(cacheKeyOperator + loginMark);
|
||||
}
|
||||
else
|
||||
{
|
||||
operatorResult.userInfo = operatorInfo;
|
||||
operatorResult.stateCode = 1;
|
||||
await CacheHelper.ExpireAsync(cacheKeyOperator + loginMark, LoginExpire);
|
||||
await CacheHelper.ExpireAsync(cacheKeyOperator + facilityMark + operatorInfo.UserId, LoginExpire);
|
||||
await CacheHelper.ExpireAsync(facilityMark + GlobalContext.SystemConfig.TokenName + "_" + operatorInfo.UserId + "_" + operatorInfo.LoginTime, LoginExpire);
|
||||
}
|
||||
}
|
||||
}
|
||||
return operatorResult;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return operatorResult;
|
||||
}
|
||||
}
|
||||
|
||||
#region 登录错误次数记录
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前登录错误次数
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<int> GetCurrentErrorNum()
|
||||
{
|
||||
int res = 0;
|
||||
try
|
||||
{
|
||||
string cookieMark = GetProvider(LoginUserMarkKey);
|
||||
if (string.IsNullOrEmpty(cookieMark))
|
||||
{
|
||||
cookieMark = Guid.NewGuid().ToString();
|
||||
SetProvider(LoginUserMarkKey, cookieMark);
|
||||
}
|
||||
string num = await CacheHelper.GetAsync<string>(cacheKeyError + cookieMark);
|
||||
if (!string.IsNullOrEmpty(num))
|
||||
{
|
||||
res = Convert.ToInt32(num);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加错误次数
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<int> AddCurrentErrorNum()
|
||||
{
|
||||
int res = 0;
|
||||
try
|
||||
{
|
||||
string cookieMark = GetProvider(LoginUserMarkKey);
|
||||
if (string.IsNullOrEmpty(cookieMark))
|
||||
{
|
||||
cookieMark = Guid.NewGuid().ToString();
|
||||
SetProvider(LoginUserMarkKey, cookieMark);
|
||||
}
|
||||
string num = await CacheHelper.GetAsync<string>(cacheKeyError + cookieMark);
|
||||
if (!string.IsNullOrEmpty(num))
|
||||
{
|
||||
res = Convert.ToInt32(num);
|
||||
}
|
||||
res++;
|
||||
num = res + "";
|
||||
await CacheHelper.SetAsync(cacheKeyError + cookieMark, num, 24);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除当前登录错误次数
|
||||
/// </summary>
|
||||
public async Task ClearCurrentErrorNum()
|
||||
{
|
||||
try
|
||||
{
|
||||
string cookieMark = GetProvider(LoginUserMarkKey);
|
||||
if (string.IsNullOrEmpty(cookieMark))
|
||||
{
|
||||
cookieMark = Guid.NewGuid().ToString();
|
||||
SetProvider(LoginUserMarkKey, cookieMark);
|
||||
}
|
||||
await CacheHelper.RemoveAsync(cacheKeyError + cookieMark);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#endregion 登录错误次数记录
|
||||
}
|
||||
}
|
15
HT.Cloud.Code/Operator/OperatorResult.cs
Normal file
15
HT.Cloud.Code/Operator/OperatorResult.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace HT.Cloud.Code
|
||||
{
|
||||
public class OperatorResult
|
||||
{
|
||||
/// <summary>
|
||||
/// 状态码-1未登录,1登录成功,0登录过期
|
||||
/// </summary>
|
||||
public int stateCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 登录者用户信息
|
||||
/// </summary>
|
||||
public OperatorModel userInfo { get; set; }
|
||||
}
|
||||
}
|
50
HT.Cloud.Code/Operator/OperatorUserInfo.cs
Normal file
50
HT.Cloud.Code/Operator/OperatorUserInfo.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using System;
|
||||
|
||||
namespace HT.Cloud.Code
|
||||
{
|
||||
public class OperatorUserInfo
|
||||
{
|
||||
//密码
|
||||
public string F_UserPassword { get; set; }
|
||||
|
||||
//
|
||||
public string F_UserSecretkey { get; set; }
|
||||
|
||||
//登录时间设置
|
||||
public DateTime? F_AllowStartTime { get; set; }
|
||||
|
||||
public DateTime? F_AllowEndTime { get; set; }
|
||||
|
||||
//锁定时间设置
|
||||
public DateTime? F_LockStartDate { get; set; }
|
||||
|
||||
public DateTime? F_LockEndDate { get; set; }
|
||||
|
||||
//第一次登录
|
||||
public DateTime? F_FirstVisitTime { get; set; }
|
||||
|
||||
//上一次登录时间
|
||||
public DateTime? F_PreviousVisitTime { get; set; }
|
||||
|
||||
//最后一次登录时间
|
||||
public DateTime? F_LastVisitTime { get; set; }
|
||||
|
||||
//修改密码时间
|
||||
public DateTime? F_ChangePasswordDate { get; set; }
|
||||
|
||||
//登录次数
|
||||
public int? F_LogOnCount { get; set; }
|
||||
|
||||
//在线标记
|
||||
public bool? F_UserOnLine { get; set; }
|
||||
|
||||
//安全问题
|
||||
public string F_Question { get; set; }
|
||||
|
||||
//问题答案
|
||||
public string F_AnswerQuestion { get; set; }
|
||||
|
||||
//默认主题
|
||||
public string F_Theme { get; set; }
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user