詳細には、Net Core権限検証とライセンス(Authore Filter、アクションFilterAttribute)
Net CoreではAuthorze FilterまたはアクションFilterAttributeを使用してログイン権限の検証とライセンスを実現します。
一、Authorze Filter
新しいライセンスクラスAllowAnonymousはAuthorze Filterを継承しています。IAllowow AnonymousFilter
二、アクションFilterAttribute
権限判定クラスを作成してアクションFilterAttributeを継承します。
controller Action Descriptor.MethodInfo.Get CutstomAttributes(inheit:true)
.Any(a=>a.GetType().Equals(typeof(NoPermissionRequiredAttribute) 要求されたコントローラと方法にNoPermissionRequiredAttributeがあるかどうかを判断します。
string.IsNull OrWhite Space(filter Contact.HttpContact.Request.Query[Loginning Info].ToString() 要求ヘッダに表示があるかどうかを判断する。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
一、Authorze Filter
新しいライセンスクラスAllowAnonymousはAuthorze Filterを継承しています。IAllowow AnonymousFilter
public class AllowAnonymous : AuthorizeFilter, IAllowAnonymousFilter
{
}
新しいブロック類はAuthorze Filterを継承します。
public class LoginAuthorzation : AuthorizeFilter
{
}
ブロックに処理要求を入れる方法
/// <summary>
/// , ,ExceptionFilter
/// </summary>
/// <param name="context"> </param>
public override async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
if (IsHaveAllow(context.Filters))
{
return;
}
// url
// {/ Home / Index}
var url = context.HttpContext.Request.Path.Value;
if (string.IsNullOrWhiteSpace(url))
{
return;
}
var list = url.Split("/");
if (list.Length<=0||url=="/")
{
return;
}
var controllerName = list[1].ToString().Trim();
var actionName = list[2].ToString().Trim();
//
var flag=PowerIsTrue.IsHavePower(controllerName, actionName);
if (flag.Item1!=0)
{
context.Result = new RedirectResult("/Home/Index");
}
}
//
public static bool IsHaveAllow(IList<IFilterMetadata> filers)
{
for (int i = 0; i < filers.Count; i++)
{
if (filers[i] is IAllowAnonymousFilter)
{
return true;
}
}
return false;
}
新規ビジネスロジック判定のクラス
public static (int,string) IsHavePower(string controllerName,string actionName)
{
return (0," ");
}
Startupに登録する
services.AddMvc(options =>
{
options.Filters.Add<LoginAuthorzation>(); //
}
context.HttpContactext.Request.Path.Value 要求されたurlを取得します。二、アクションFilterAttribute
権限判定クラスを作成してアクションFilterAttributeを継承します。
public class ActionFilterAttributeLogin: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var isDefined = false;
var controllerActionDescriptor = filterContext.ActionDescriptor as ControllerActionDescriptor;
if (controllerActionDescriptor != null)
{
isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
.Any(a => a.GetType().Equals(typeof(NoPermissionRequiredAttribute)));
}
if (isDefined) return;
if (string.IsNullOrWhiteSpace(filterContext.HttpContext.Request.Query["LoginInfo"].ToString()))
{
var item = new ContentResult();
item.Content = " ";
filterContext.Result = new RedirectResult("/Account/Login");
}
base.OnActionExecuting(filterContext);
}
public class NoPermissionRequiredAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
}
}
}
Startupに登録する
services.AddMvc(options =>
{
options.Filters.Add<ActionFilterAttributeLogin>(); // --
}
filter Conttext.Action Descriptor as Controller Action Descriptor 要求されたコントローラと方法を取得するcontroller Action Descriptor.MethodInfo.Get CutstomAttributes(inheit:true)
.Any(a=>a.GetType().Equals(typeof(NoPermissionRequiredAttribute) 要求されたコントローラと方法にNoPermissionRequiredAttributeがあるかどうかを判断します。
string.IsNull OrWhite Space(filter Contact.HttpContact.Request.Query[Loginning Info].ToString() 要求ヘッダに表示があるかどうかを判断する。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。