1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#region
 
using System.Data;
using CSFrameworkV5.Common;
using CSFrameworkV5.DataAccess;
using CSFrameworkV5.Models;
 
#endregion
 
namespace CSFrameworkV5.WCFContract
{
    /// <summary>
    ///     系统所有用户缓存数据(仅含帐号和密码信息),用于客户端调用WCF接口时检测用户名和密码,有效避免频繁访问数据库。
    /// </summary>
    public static class ActivityUserCache
    {
        private static DataTable _AllUser;
 
        //基于性能优化,定义成员变量
        private static DataRow[] _CurrentValidateUser;
        private static string filter = "Account='{0}' AND Password='{1}'";
 
        /// <summary>
        ///     所有缓存的用户
        /// </summary>
        public static DataTable AllUser
        {
            get
            {
                if (_AllUser == null) RefreshUserCache();
 
                return _AllUser;
            }
        }
 
        /// <summary>
        ///     刷新缓存数据,重新加载所有用户数据。
        /// </summary>
        public static void RefreshUserCache()
        {
            _AllUser = dalUser.GetUserList4Cache();
        }
 
        /// <summary>
        ///     系统增新用户,添加到缓存表
        /// </summary>
        /// <param name="account"></param>
        /// <param name="encodedPwd"></param>
        public static void SyncAddUserCache(string account, string encodedPwd)
        {
            if (_AllUser == null) return;
 
            lock (_AllUser)
            {
                var R = _AllUser.Rows.Add();
                R[tb_MyUser.Account] = account;
                R[tb_MyUser.Password] = encodedPwd;
                _AllUser.AcceptChanges();
            }
        }
 
        /// <summary>
        ///     删除指定缓存用户
        /// </summary>
        /// <param name="account"></param>
        public static void SyncRemoveUserCache(string account)
        {
            if (_AllUser == null) return;
 
            lock (_AllUser)
            {
                var rs = _AllUser.Select("Account='" + account + "'");
                if (rs.Length > 0) _AllUser.Rows.Remove(rs[0]);
            }
        }
 
        /// <summary>
        ///     同步用户密码
        /// </summary>
        /// <param name="account">帐号</param>
        /// <param name="pwd">新密码</param>
        public static void SyncUpdateUserCache(string account, string pwd)
        {
            if (_AllUser == null) return;
 
            var rs = _AllUser.Select("Account='" + account + "'");
            if (rs.Length > 0)
                lock (_AllUser)
                {
                    rs[0][tb_MyUser.Password] = pwd;
                    _AllUser.AcceptChanges();
                }
        }
 
        /// <summary>
        ///     同步用户缓存数据
        /// </summary>
        /// <param name="newUserData">最新修改的用户数据</param>
        public static void SyncUserCache(DataTable newUserData)
        {
            if (newUserData.Rows.Count <= 0) return;
 
            var R = newUserData.Rows[0];
            if (R.RowState != DataRowState.Deleted)
            {
                var account = ConvertEx.ToString(R[tb_MyUser.Account]);
                var password = ConvertEx.ToString(R[tb_MyUser.Password]);
                if (R.RowState == DataRowState.Added)
                    SyncAddUserCache(account, password);
 
                if (R.RowState == DataRowState.Modified)
                    SyncUpdateUserCache(account, password);
            }
        }
 
        /// <summary>
        ///     检查用户名及密码是否正确
        /// </summary>
        /// <param name="account">登录帐号</param>
        /// <param name="encodedPwd">加密后的密码</param>
        /// <returns></returns>
        public static bool ValidateUser(string account, string encodedPwd)
        {
            _CurrentValidateUser =
                AllUser.Select(string.Format(filter, account, encodedPwd));
            return _CurrentValidateUser.Length > 0;
        }
    }
}