#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;
|
}
|
}
|
}
|