using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace CommonHelper
{
///
/// 用户登陆信息提供者。
///
public class OperatorProvider
{
///
/// Session/Cookie键。
///
private const string LOGIN_USER_KEY = "LoginUser";
private OperatorProvider() { }
static OperatorProvider() { }
//使用内部类+静态构造函数实现延迟初始化。
class Nested
{
static Nested() { }
internal static readonly OperatorProvider instance = new OperatorProvider();
}
///
/// 在大多数情况下,静态初始化是在.NET中实现Singleton的首选方法。
///
public static OperatorProvider Instance
{
get
{
return Nested.instance;
}
}
///
/// 从配置文件读取登陆提供者模式(Session/Cookie)。
///
private string LoginProvider = Configs.GetValue("LoginProvider");
///
/// 从配置文件读取登陆用户信息保存时间。
///
private int LoginTimeout = Convert.ToInt32(Configs.GetValue("LoginTimeout"));
///
/// 从Session/Cookie获取或设置用户操作模型。
///
///
public Operator Current
{
get
{
Operator operatorModel = new Operator();
if (LoginProvider == "Cookie")
{
operatorModel = WebHelper.GetCookie(LOGIN_USER_KEY).DESDecrypt().ToObject();
}
else
{
operatorModel = WebHelper.GetSession(LOGIN_USER_KEY).DESDecrypt().ToObject();
}
return operatorModel;
}
set
{
if (LoginProvider == "Cookie")
{
WebHelper.SetCookie(LOGIN_USER_KEY, value.ToJson().DESEncrypt(), LoginTimeout);
}
else
{
WebHelper.SetSession(LOGIN_USER_KEY, value.ToJson().DESEncrypt(), LoginTimeout);
}
}
}
///
/// 从Session/Cookie删除用户操作模型。
///
public void Remove()
{
if (LoginProvider == "Cookie")
{
WebHelper.RemoveCookie(LOGIN_USER_KEY);
}
else
{
WebHelper.RemoveSession(LOGIN_USER_KEY);
}
}
}
///
/// 操作模型,保存登陆用户必要信息。
///
public class Operator
{
public Operator()
{
UserId = 0;
LoginTime=DateTime.Now;
}
///
/// 用户id(未登录为0)
///
public int UserId { get; set; }
///
/// 登录名
///
public string LoginName { get; set; }
///
/// 真实姓名
///
public string RealName { get; set; }
///
/// 密码
///
public string Password { get; set; }
///
/// 用户类型
///
public int UserType { get; set; }
///
/// 登录时间
///
public DateTime LoginTime { get; set; }
///
/// token
///
public string Token { get; set; }
///
/// 头像url
///
public string Avator { get; set; }
}
}