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;
}
}
}
}