2022-10-14 16:08:54 +08:00
using Microsoft.AspNetCore.Http ;
using Microsoft.AspNetCore.Mvc ;
using Microsoft.AspNetCore.Mvc.Filters ;
using Microsoft.AspNetCore.Routing ;
using Microsoft.Extensions.Logging ;
using Microsoft.Extensions.DependencyInjection ;
using Newtonsoft.Json ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using Repository.BackendRepository.Interface ;
using Backend.Models ;
using Backend.Services.Implement ;
namespace Backend.Controllers
{
public class MybaseController < T > : Controller where T : MybaseController < T >
{
private ILogger < T > _logger ;
protected ILogger < T > Logger = > _logger ? ? ( _logger = HttpContext ? . RequestServices . GetService < ILogger < T > > ( ) ) ;
private IBackendRepository backendRepository = > HttpContext ? . RequestServices . GetService < IBackendRepository > ( ) ;
private IUserInfoRepository userInfoRepository = > HttpContext ? . RequestServices . GetService < IUserInfoRepository > ( ) ;
public string baseURL = > HttpContext ? . Request . Scheme + "://" + HttpContext ? . Request . Host + "/" ;
public BackgroundService backgroundService ;
protected MyUserInfo myUserInfo = null ;
public string controllerName ;
public string actionName ;
2022-10-21 19:40:38 +08:00
public string main_system_type = "device_system_category_layer2" ;
public string sub_system_type = "device_system_category_layer3" ;
2022-10-24 17:53:33 +08:00
public string system_setting_type = "system_setting" ;
2022-10-21 19:40:38 +08:00
2022-10-14 16:08:54 +08:00
public MybaseController ( ) { }
public override void OnActionExecuting ( ActionExecutingContext filterContext )
{
EDFunction edFunction = new EDFunction ( ) ;
var myAccount = edFunction . AESDecrypt ( HttpContext . Session . GetString ( "MyAccount" ) ) ;
controllerName = ControllerContext . RouteData . Values [ "controller" ] . ToString ( ) ; //controller名稱
actionName = ControllerContext . RouteData . Values [ "action" ] . ToString ( ) ; //action名稱
bool isAjaxCall = filterContext . HttpContext . Request . Headers [ "x-requested-with" ] = = "XMLHttpRequest" ;
if ( string . IsNullOrEmpty ( myAccount ) )
{
if ( isAjaxCall )
{
filterContext . HttpContext . Response . Clear ( ) ;
filterContext . HttpContext . Response . StatusCode = 499 ;
return ;
}
else
{
filterContext . Result = new RedirectToRouteResult (
new RouteValueDictionary
{
{ "controller" , "Login" } ,
{ "action" , "Index" }
} ) ;
return ;
}
}
backgroundService = new BackgroundService ( backendRepository ) ;
//取得當前登入使用者資訊
myUserInfo = userInfoRepository . GetMyUserInfoByAccount < MyUserInfo > ( myAccount ) ;
var showview = backendRepository . GetAllAsync < string > ( $ @ "select ap.ShowView from userinfo us
left join role_auth ra on ra . role_guid = us . role_guid
left join auth_page ap on ap . AuthCode = ra . AuthCode
2023-01-31 13:54:00 +08:00
where us . userinfo_guid = ' { myUserInfo . Userinfo_guid } ' and ap . ShowView is not null ");
2022-10-14 16:08:54 +08:00
myUserInfo . ShowView = showview . Result ;
ViewBag . myUserInfo = myUserInfo ;
ViewBag . role = showview . Result ;
2023-05-16 10:52:15 +08:00
ViewBag . ProjectName = backendRepository . GetOneAsync < string > ( "select system_key from variable where deleted = 0 and system_type = 'project_name';" ) . Result ;
2022-10-14 16:08:54 +08:00
#region 記 錄 人 員 操 作 記 錄
var content = JsonConvert . SerializeObject ( filterContext . ActionArguments ) ;
var parameter = content . CompareTo ( "{}" ) = = 0 ? null : content ;
List < string > removeParam = new List < string > ( ) { "ChangePassword" } ; //移除不紀錄參數的actionName
if ( removeParam . Any ( x = > actionName . Contains ( x ) ) )
{
parameter = "{}" ;
}
Dictionary < string , object > operatorLog = new Dictionary < string , object > ( ) ;
operatorLog = new Dictionary < string , object > ( )
{
{ "@controller_name" , controllerName } ,
{ "@action_name" , actionName } ,
{ "@parameter" , parameter } ,
{ "@created_by" , myUserInfo . Userinfo_guid }
} ;
2023-03-03 18:35:58 +08:00
if ( ( actionName ! = "CompareData" & & controllerName ! = "NiagaraDataSynchronize" ) & &
( actionName ! = "ImportDevForCor" & & controllerName ! = "DeviceImport" ) ) //skip the log
2022-12-31 16:49:47 +08:00
backendRepository . InsertOperatorLog ( operatorLog , "operation_back_log" ) ;
2022-10-14 16:08:54 +08:00
//operatorLogRepository.Add(operatorLog, properties);
#endregion
}
}
}