public class OperateLogAttribute : Attribute, IAsyncActionFilter
{
/// <summary>
/// 菜单ID
/// </summary>
private int MenuID { get; set; }
/// <summary>
/// 父菜单ID
/// </summary>
private int PID { get; set; }
/// <summary>
/// 日志内容
/// </summary>
private string Remark { get; set; }
/// <summary>
/// 操作类型枚举
/// </summary>
private int OperateType { get; set; }
/// <summary>
/// 构造日志类型
/// </summary>
/// <param name="MenuID"></param>
/// <param name="PID"></param>
/// <param name="Remark"></param>
/// <param name="OperateType"></param>
public OperateLogAttribute(int MenuID, int PID, string Remark,int OperateType)
{
this.MenuID = MenuID;
this.PID = PID;
this.Remark = Remark;
this.OperateType = OperateType;
}
/// <summary>
/// 添加操作日志
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
ClaimsPrincipal user = authorizationHandlerContext.User;
string userId = user.Claims.FirstOrDefault(s => s.Type == ClaimTypes.NameIdentifier).Value;
string userName = user.Claims.FirstOrDefault(s => s.Type == ClaimTypes.Name).Value;
string projectId = user.Claims.FirstOrDefault(s => s.Type == "projectId").Value;
string ip = CustomAuthorizationHandler._httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
var _sanitateSetrvice = CustomAuthorizationHandler._httpContextAccessor.HttpContext.RequestServices.GetService<ISanitateBusinessContract>();
_sanitateSetrvice.AddUserOperateLog(new OperateLogInsertModel()
{
UserID = int.Parse(userId),
IP = ip,
IsValid = 1,
OperateTime = DateTime.Now,
ProjectID = projectId,
MenuID = this.MenuID,
PID = this.PID,
OperateType = this.OperateType,
Remark = $"{userName}-{this.Remark}",
UserEquipment = ""
});
await next.Invoke();
}
}
----------------------------------------------------------------
调用
[OperateLog(4134, 4134, "查看首页项目列表", (int)PermissionsEnum.查看)]
NetCore实现操作日志全局调用
最新推荐文章于 2024-08-01 22:04:53 发布