using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using HT.Cloud.Code; using HT.Cloud.Service.SystemOrganize; /// /// 权限验证 /// namespace HT.Cloud.Web { public class HandlerAuthorizeAttribute : ActionFilterAttribute { private readonly bool _needAuth; private string _authorize { get; set; } /// /// 权限特性 /// /// 权限参数 /// 是否鉴权 public HandlerAuthorizeAttribute(string authorize = "", bool needAuth = true) { _authorize = authorize.ToLower(); _needAuth = needAuth; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (OperatorProvider.Provider.GetCurrent() != null && OperatorProvider.Provider.GetCurrent().IsSuperAdmin) { return; } if (!_needAuth) { return; } if (!string.IsNullOrEmpty(_authorize) && AuthorizeCheck(filterContext)) { return; } if (!ActionAuthorize(filterContext)) { OperatorProvider.Provider.EmptyCurrent("pc_").GetAwaiter().GetResult(); //filterContext.HttpContext.Response.WriteAsync(""); filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.PathBase + "/Home/Error?msg=403"); return; } } private bool ActionAuthorize(ActionExecutingContext filterContext) { try { OperatorResult result = OperatorProvider.Provider.IsOnLine("pc_").GetAwaiter().GetResult(); if (result.stateCode <= 0) { return false; } var action = GlobalContext.HttpContext.Request.Path; return GlobalContext.GetRequiredService().ActionValidate(action).GetAwaiter().GetResult(); } catch (System.Exception ex) { LogHelper.WriteWithTime(ex); return false; } } private bool AuthorizeCheck(ActionExecutingContext filterContext) { try { OperatorResult result = OperatorProvider.Provider.IsOnLine("pc_").GetAwaiter().GetResult(); if (result.stateCode <= 0) { return false; } return GlobalContext.GetRequiredService().ActionValidate(_authorize, true).GetAwaiter().GetResult(); } catch (System.Exception ex) { LogHelper.WriteWithTime(ex); return false; } } } }