using BizCom; using System; using System.Collections.Generic; using System.Data; using System.Web; namespace SiteCore { public class WebUser { public WebUser() { } //public WebUser(int uid) //{ // UserID = uid; //} //Cache最后更新时间 private static string LastCacheTime = ""; public static Dictionary UserCache = new Dictionary(); private static readonly List userKeyList = new List(); private static readonly object usercache_Flag = 1; /// /// 添加用户Cache /// /// /// public static void AddUserCache(string key, WebUser value) { lock (usercache_Flag) { if (UserCache.Count > 2000) { UserCache.Remove(userKeyList[0]); userKeyList.RemoveAt(0); } if (!UserCache.ContainsKey(key)) { UserCache.Add(key, value); if (!userKeyList.Contains(key)) userKeyList.Add(key); } else { UserCache[key] = value; } } } public static void RemoveUserCache(string key) { if (UserCache.ContainsKey(key)) { UserCache.Remove(key); if (userKeyList.Contains(key)) userKeyList.Remove(key); } } //更新缓存时间,以便重新加载数据 public static void RefresCacheTime() { LastCacheTime = DateTime.Now.ToString("yyMMddhhmm"); } #region user /// /// 用户ID /// public int UserID { get { if (User != null) return User.ID; return 0; } } public string UserAcc { get { if (User != null) return User.Account; return ""; } } public string UserName { get { if (User != null) return User.Name; return ""; } } /// /// 会员实体 /// public CeErpUser User { get; set; } public CeErpUserPost UserPost { get; set; } #endregion /// /// 缓存时间 /// public string CachekTicks { get; set; } private static WebUser InitUser() { WebUser webUser = null; //获取COOKIES HttpCookie lcCookie = HttpContext.Current.Request.Cookies[webConfig.CookieName]; if (lcCookie != null) { string name = HttpUtility.UrlDecode(lcCookie.Values["User"]); string ticket = lcCookie.Values["Ticket"]; //string dl_ticket = erpRedis.RedisHelper.StringGet("dl_"+name); //string mullogin = lcCookie.Values["mullogin"]; //if (mullogin == "0" || mullogin == "") //{ // if (ticket != dl_ticket) return null;//被别的人登录了该账号 //} //if (WebHelper.getLoginTicket(name) != ticket) return null; try { //判断缓存是否存在 if (!string.IsNullOrEmpty(name) && UserCache.ContainsKey(name)) { webUser = UserCache[name]; } else { return SetUser(name, ticket); } } catch (Exception ex) { //SyLog.WriteLog("获取会员名发生错误(Name:" + name+",Ticket:"+ticket+")", ex); } } return webUser; } public static WebUser SetUser(string name, string ticket) { CeErpUser SUser = CeErpUser.GetUserByCookie(name, ticket); if (SUser != null) { WebUser webUser = new WebUser(); //职位 CeErpUserPost userPost = CeErpUserPost.GetByUserID(SUser.ID); //人员 webUser.UserPost = userPost; //商家信息 webUser.User = SUser; AddUserCache(name, webUser); return webUser; } return null; } public static WebUser GetUser() { WebUser user = null; //HttpContext.Current.Session["WEBUSER"] == null; if (HttpContext.Current.Items["WEBUSER"] == null) { user = InitUser(); HttpContext.Current.Items["WEBUSER"] = user; } else { user = (WebUser)HttpContext.Current.Items["WEBUSER"]; } return user; } #region 权限缓存 private static object premissioncache_Flag = 1; private static Dictionary PermissionCache = new Dictionary(); public static void ClearPermissionCache() { lock (premissioncache_Flag) { PermissionCache.Clear(); } } public static void AddPermissionCache(string key, DataTable value) { lock (premissioncache_Flag) { if (!PermissionCache.ContainsKey(key)) { PermissionCache.Add(key, value); } else { PermissionCache[key] = value; } } } public static void RemovePermissionCache(string key) { if (PermissionCache.ContainsKey(key)) { PermissionCache.Remove(key); } } public static void UpdatePermissionCache(string key, DataTable dt) { if (PermissionCache.ContainsKey(key)) { PermissionCache[key] = dt; } } public static DataTable GetPermission(string _pkey) { if (_pkey == "") return null; //string[] pArr = _pkey.Split('|'); //string key = pArr[1].ToString(); //if (pArr[0] == "5") key = "admin_5"; if (PermissionCache.ContainsKey(_pkey)) return PermissionCache[_pkey]; else { lock (premissioncache_Flag) { DataTable dt = null; if (_pkey == "admin") dt = CeErpPermission.GetErpAllPermission(); else dt = CeErpPermission.GetErpPermission(_pkey); AddPermissionCache(_pkey, dt); return dt; } } } #endregion } }