using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection; using SolarPower.Models.User; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using Dapper; using SolarPower.Models; using System.Data.SqlClient; using Microsoft.Extensions.Configuration; using SolarPower.Repository.Interface; using System.IO; using System.Text; using SolarPower.Models.OperatorLogModel; using Newtonsoft.Json; using SolarPower.Models.Company; using SolarPower.Models.Role; namespace SolarPower.Controllers { public class MyBaseController : Controller where T : MyBaseController { private ILogger _logger; protected ILogger Logger => _logger ?? (_logger = HttpContext?.RequestServices.GetService>()); private IUserRepository userRepository => HttpContext?.RequestServices.GetService(); private ICompanyRepository companyRepository => HttpContext?.RequestServices.GetService(); private IRoleRepository roleRepository => HttpContext?.RequestServices.GetService(); private IOperatorLogRepository operatorLogRepository => HttpContext?.RequestServices.GetService(); protected MyUser myUser = null; public string controllerName; public string actionName; public string baseURL => HttpContext?.Request.Scheme + "://" + HttpContext?.Request.Host + "/"; public ErrorCode errorCode = new ErrorCode(); public MyBaseController() { } public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); EDFunction edFunction = new EDFunction(); var myAccount = edFunction.AESDecrypt(HttpContext.Session.GetString("MyAccount")); //取得登入後,該位使用者的Account controllerName = ControllerContext.RouteData.Values["controller"].ToString(); //controller名稱 actionName = ControllerContext.RouteData.Values["action"].ToString(); //action名稱 if (string.IsNullOrEmpty(myAccount) && myAccount.CompareTo(HttpContext.Session.GetString("MyAccount")) == 0) { //session 找不到account或者無法成功解密 return; } //取得當前登入使用者資訊 myUser = userRepository.GetMyUserInfoByAccount(myAccount); myUser.Company = companyRepository.GetMyCompanyInfoById(myUser.CompanyId); myUser.Role = roleRepository.GetMyRoleInfoById(myUser.RoleId); List auth_arr = new List(); if (myUser.Role.Layer != 0) //判斷是否平台管理員 { foreach (var auth in myUser.Role.Auths) { var per_auch_arr = auth.Split(','); foreach (var x in per_auch_arr) { auth_arr.Add(x); } } ViewBag.auths = auth_arr; } ViewBag.myUser = myUser; #region 記錄人員操作記錄 var content = JsonConvert.SerializeObject(filterContext.ActionArguments); OperatorLog operatorLog = new OperatorLog() { ControllerName = controllerName, ActionName = actionName, Parameter = content.CompareTo("{}") == 0 ? null : content, CreatedBy = myUser.Id, }; List removeParam = new List() { "ChangePassword" }; //移除不紀錄參數的actionName if (removeParam.Any(x => actionName.Contains(x))) { operatorLog.Parameter = "{}"; } List properties = new List() { "ControllerName", "ActionName", "Parameter", "CreatedBy", }; operatorLogRepository.Add(operatorLog, properties); #endregion } /// /// 判斷是否維平台的管理員或平台使用者 /// /// /// public bool IsPlatformLayer(byte roleLayer) { if (roleLayer == (int)RoleLayerEnum.PlatformAdmin || roleLayer == (int)RoleLayerEnum.PlatformUser) { return true; } return false; } /// /// 取得最新的流水號 /// /// 當前的 /// /// 0: PadLeft;1: PadRight /// public string GetLastSerialNumber(string current = "", int pad = 4, byte direction = 0) { var tempSerialNumber = 0; if (!string.IsNullOrEmpty(current)) { tempSerialNumber = Convert.ToInt32(current) + 1; } else { tempSerialNumber = 1; } if (direction == 0) { return tempSerialNumber.ToString().Trim().PadLeft(pad, '0'); } else { return tempSerialNumber.ToString().Trim().PadRight(pad, '0'); } } } }