Пример #1
0
        /// <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"));
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
                }
            }
        }
Пример #4
0
 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);
     }
 }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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));
        }
Пример #7
0
        /// <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());
            }
        }