/// <summary> /// 设置Cache /// </summary> /// <param name="proxy"></param> /// <param name="user"></param> static void Cache(RedisProxy proxy, UserData user) { if (user == null) { return; } proxy.SetEntity(user); var key = BuildDataKey("name", user.Id); proxy.Set(key, user.RealName); if (user.DataState >= DataStateType.Discard) { proxy.RemoveCache <UserData>(user.Id); proxy.RemoveKey(BuildDataKey(user.UserName, "id")); proxy.RemoveKey(BuildDataKey(user.UserName, "pwd")); return; } if (user.DataState == DataStateType.Enable) { proxy.Set(BuildDataKey(user.UserName, "pwd"), user.PassWord); proxy.SetValue(BuildDataKey(user.UserName, "id"), user.Id); } else { proxy.RemoveKey(BuildDataKey(user.UserName, "id")); proxy.RemoveKey(BuildDataKey(user.UserName, "pwd")); } }
/// <summary> /// 登录 /// </summary> /// <param name="userHostAddress"></param> /// <param name="userName">用户名</param> /// <param name="pwd">密码</param> /// <returns></returns> public static Guid WebLogin(string userHostAddress, string userName, string pwd) { Guid token; using (var proxy = new RedisProxy(RedisProxy.DbAuthority)) { var tk = DataKeyBuilder.ToKey("login", userName, "token"); token = proxy.GetValue <Guid>(tk); if (token == Guid.Empty) { token = Guid.NewGuid(); proxy.SetValue(tk, token); } proxy.Set(DataKeyBuilder.ToKey("login", token), new LoginToken { UserId = 1, Address = userHostAddress == "::1" ? "127.0.0.1" : userHostAddress, Token = token, LoginDateTime = DateTime.Now, LastDateTime = DateTime.Now, TimeOut = DateTime.Now.AddMinutes(30) }); } BusinessContext.Current.Tooken = token; BusinessContext.Current.PowerChecker.ReloadLoginUserInfo(token); return(token); }
/// <summary> /// 缓存页面数据 /// </summary> static void Cache(PageItemData item, PageItemDataAccess piAccess) { if (string.IsNullOrWhiteSpace(item.Url)) { return; } PageItemData master; if (item.MasterPage > 0) { PageItemDataAccess access = new PageItemDataAccess(); master = access.LoadByPrimaryKey(item.MasterPage) ?? item; } else { master = item; } using (var proxy = new RedisProxy(RedisProxy.DbSystem)) { proxy.Set(ToUrlKey(item.Url), master); proxy.Set(ToPageKey(item.Id), master); proxy.Set(RedisProxy.DataKey <PageItemData>(item.Id), master); proxy.Set(ToPageKey("btns"), piAccess.All(p => p.ParentId == master.Id).Select(p => p.Name).ToList()); if (master == item && !string.IsNullOrWhiteSpace(master.Config.SystemType)) { proxy.SetValue($"page:{item.Config.SystemType}", master.Id); } } }
private static void CacheUser(PositionPersonnelData personnel, UserData user) { using (var proxy = new RedisProxy(RedisProxy.DbSystem)) { Cache(proxy, user); proxy.SetValue(BuildDataKey("depid", personnel.UserId), personnel.DepartmentId); proxy.SetEntity(personnel); } }
/// <summary> /// 登录 /// </summary> /// <param name="userHostAddress"></param> /// <param name="userName">用户名</param> /// <param name="pwd">密码</param> /// <returns></returns> public static Guid WebLogin(string userHostAddress, string userName, string pwd) { if (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(pwd)) { LogRecorder.RecordLoginLog($@"用户名({userName})或密码{pwd}为空,来自{userHostAddress}"); return(Guid.Empty); } Guid token; int uid; using (var proxy = new RedisProxy(RedisProxy.DbSystem)) { var pwd2 = proxy.Get(DataKeyBuilder.ToKey("user", userName, "pwd")); if (pwd2 == null || !string.Equals(pwd, pwd2)) { LogRecorder.RecordLoginLog($@"{userName}密码不对{pwd2}-[测试]{pwd},来自{userHostAddress}"); return(Guid.Empty); } uid = proxy.GetValue <int>(DataKeyBuilder.ToKey("user", userName, "id")); if (uid == 0) { LogRecorder.RecordLoginLog($@"{userName}用户不存在,来自{userHostAddress}"); return(Guid.Empty); } } using (var proxy = new RedisProxy(RedisProxy.DbAuthority)) { var tk = DataKeyBuilder.ToKey("login", userName, "token"); token = proxy.GetValue <Guid>(tk); if (token == Guid.Empty) { token = Guid.NewGuid(); proxy.SetValue(tk, token); } proxy.Set(DataKeyBuilder.ToKey("login", token), new LoginToken { UserId = uid, Address = userHostAddress == "::1" ? "127.0.0.1" : userHostAddress, Token = token, LoginDateTime = DateTime.Now, LastDateTime = DateTime.Now, TimeOut = DateTime.Now.AddMinutes(30) }); } BusinessContext.Current.Tooken = token; BusinessContext.Current.PowerChecker.ReloadLoginUserInfo(token); return(token); }
/// <summary> /// 缓存角色的页面权限数据 /// </summary> /// <param name="roleId"></param> /// <param name="page"></param> /// <param name="proxy"></param> private void CacheRoleAction(int roleId, PageItemData page, RedisProxy proxy) { if (!_actions.ContainsKey(page.Id)) { return; } var dictionary = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); var actions = roleId <= 1 ? _actions[page.Id].ToArray() : _actions[page.Id].Where(p => _allPowers.Any(a => a.PageItemId == p.Id)).ToArray(); foreach (var bp in actions) { if (String.IsNullOrEmpty(bp.ExtendValue) || dictionary.ContainsKey(bp.ExtendValue)) { continue; } dictionary.Add(bp.ExtendValue, bp.ID); } if (page.AuditPage > 0 && _actions.ContainsKey(page.AuditPage)) { var friendsItemDatas = roleId <= 1 ? _actions[page.AuditPage].ToArray() : _actions[page.AuditPage].Where(p => _allPowers.Any(a => a.PageItemId == p.Id)).ToArray(); foreach (var bp in friendsItemDatas) { if (String.IsNullOrEmpty(bp.ExtendValue) || dictionary.ContainsKey(bp.ExtendValue)) { continue; } dictionary.Add(bp.ExtendValue, bp.ID); } } AddActionSynonym(dictionary, "list", "details"); AddActionSynonym(dictionary, "update", "details"); foreach (var action in dictionary.Keys) { proxy.SetValue(ToRolePageKey(roleId, page.ID, "action", action), 1); } proxy.Set(ToRolePageKey(roleId, page.ID, "btns"), actions.Select(p => p.Name)); }
/// <summary> /// 缓存页面的审批用户 /// </summary> /// <param name="proxy"></param> private void CachePageAuditUser(RedisProxy proxy) { foreach (var page in _pages.Where(p => p.ItemType == PageItemType.Page)) { if (!_actions.ContainsKey(page.Id)) { //Trace.WriteLine("错误页面", page.Caption + page.Id); continue; } if (page.Config.AuditPage > 0) { var friend = _pages.FirstOrDefault(p => p.Id == page.Config.AuditPage); if (friend == null) { //Trace.WriteLine($"错误连接({page.Config.AuditPage})", page.Caption + page.Id); } else { proxy.SetValue($"audit:page:link:{page.Id}", page.Config.AuditPage); //Trace.WriteLine($"连接到=>{friend.Caption}", page.Caption + page.Id); } continue; } var items = _actions[page.Id].Where(p => audits.Contains(p.ExtendValue)).ToArray(); if (items.Length == 0) { //Trace.WriteLine("没有审核操作", page.Caption + page.Id); continue; } var item_ids = items.Select(p => p.Id).ToList(); var pwoers = _allPowers.Where(p => item_ids.Contains(p.PageItemId)).ToArray(); if (pwoers.Length == 0) { //Trace.WriteLine("没有审核用户", page.Caption + page.Id); continue; } var roles = pwoers.Select(p => p.RoleId).Distinct().ToArray(); var posAccess = new OrganizePositionDataAccess(); var ponAccess = new PositionPersonnelDataAccess(); Dictionary <int, PositionPersonnelData> personnels = new Dictionary <int, PositionPersonnelData>(); foreach (var role in roles) { var pons = ponAccess.All(p => p.RoleId == role && p.AuditState == AuditStateType.Pass); foreach (var p in pons) { if (personnels.ContainsKey(p.Id)) { continue; } personnels.Add(p.Id, p); } var pos = posAccess.LoadValues(p => p.Id, p => p.RoleId == role); foreach (var pid in pos) { pons = ponAccess.All(p => p.OrganizePositionId == pid && p.AuditState == AuditStateType.Pass); foreach (var p in pons) { if (personnels.ContainsKey(p.Id)) { continue; } personnels.Add(p.Id, p); } } } AuditNode(proxy, page.Id, personnels.Values.ToList()); } }