1、首先建立日志表
EHECD_AdminUserLog
后台管理用户日志
ID主键 ID char(32) 32 TRUE FALSE TRUE
Name Code Data Type Length Precision Primary Foreign Key Mandatory
管理员用ID cAdminUserId char(32) 32 FALSE TRUE FALSE
姓名 sName nvarchar(10) 10 FALSE FALSE FALSE
用户IP sUserIP nvarchar(20) 20 FALSE FALSE FALSE
操作系统 sOperationSystem nvarchar(20) 20 FALSE FALSE FALSE
请求地址 sAbsolutePath nvarchar(50) 50 FALSE FALSE FALSE
浏览器 sBrowser nvarchar(20) 20 FALSE FALSE FALSE
浏览器版本 sMajorVersion nvarchar(10) 10 FALSE FALSE FALSE
功能名称 sFunName nvarchar(20) 20 FALSE FALSE FALSE
操作时间 dCreateTime datetime FALSE FALSE FALSE
里面记录存储每个登录用户
127.0.0.1 WinNT /Sys/UserLog/GetUserLog Chrome 44 查询日志 2015-09-07
2、验证入库类代码(获取参数,录入数据库)
public delegate void WriteLog();
public class ValidateAttribute : ActionFilterAttribute
{
private string _functionCode;
private string _functionName;
private bool _isValidate = false;
/// <summary>
/// 只用于登录验证
/// </summary>
public ValidateAttribute() { }
/// <summary>
/// 用户登录用户权限验证
/// </summary>
/// <param name="functionCode"></param>
public ValidateAttribute(string functionCode) { _functionCode = functionCode; }
/// <summary>
/// 验证用户权限并写操作日志
/// </summary>
/// <param name="functionCode">权限代码,如果不为null或者空字符串, 则对该用户进行权限验证 可以为空</param>
/// <param name="functionName">操作日志内容,如果不为null或者空字符串,就对应日志表中的 操作项名称 可以为空</param>
public ValidateAttribute(string functionCode, string functionName) { _functionCode = functionCode; _functionName = functionName; }
/// <summary>
/// 验证用户信息
/// </summary>
/// <param name="isOrgUser">是否验证</param>
/// <param name="functionCode">操作代码,如果不为null或者空字符串, 则对该用户进行权限验证 可以为空</param>
/// <param name="functionName">操作名称,如果不为null或者空字符串,就对应日志表中的 操作项名称 可以为空</param>
public ValidateAttribute(bool isValidate, string functionCode, string functionName)
{
_isValidate = isValidate;
_functionCode = functionCode;
_functionName = functionName;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//验证登陆
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("/Login/Index");
return;
}
//验证权限
if (!string.IsNullOrWhiteSpace(_functionCode))
{
if (!string.IsNullOrEmpty(_functionCode) && !AccountBll.ValidateUser(_functionCode))
throw new Exception(string.Format("对功能 <{0}> 无 操作权限", _functionCode));
}
//写日志
if (!string.IsNullOrWhiteSpace(_functionName))
{
string ip = Utils.GetIP();
string url = filterContext.HttpContext.Request.Url.AbsolutePath;
string browser = filterContext.HttpContext.Request.Browser.Browser;
string majorVersion = filterContext.HttpContext.Request.Browser.MajorVersion.ToString();
string platform = filterContext.HttpContext.Request.Browser.Platform;//操作系统
EHECD_AdminUserLog login = new EHECD_AdminUserLog();
login.ID = Guid.NewGuid().ToString("N").ToUpper();//MyIdMake.New();
login.sAbsolutePath = url;
login.sBrowser = browser;
login.dCreateTime = DateTime.Now;
login.sFunName = _functionName;
login.cAdminUserId = TicketHelper.CurrentTicket.UserId;
login.sName = TicketHelper.CurrentTicket.UserName;
login.sMajorVersion = majorVersion;
login.sOperationSystem = platform;
login.sUserIP = ip;
AccountBll.WriteAdminUserLog(login);
}
}
}
3、控制器层调用
/// <summary>
/// 保存员工
/// </summary>
/// <param name="user">用户信息</param>
/// <returns>1:成功,0:失败,-1:用户名已存在!</returns>
[Validate(false, "Employee", "员工管理-保存员工")]
public int SaveEmployee(EHECD_Employee Employee)
{
return EmployeeBll.SaveEmployee(Employee);
}
4、数据库
ID cAdminUserId sName sUserIP sOperationSystem sAbsolutePath sBrowser sMajorVersion sFunName dCreateTime
8FB1C039B85A4EA18D351411BFA12D16 16CEFDE5955146E4ABF916FA607ABE2A yangk 127.0.0.1 WinNT /Sys/Role/GetRoleFun Chrome 45 角色管理-获取角色功能授权 2015-09-22 15:29:41.257