.net core通过IAuthorizationFilter进行权限控制
本文介绍的是.Net Core后台权限控制模块通过IAuthorizationFilter实现权限认证,属于入门级经验分享。
一个标准的网站应用程序含有权限系统,以前编写asp、php类的网站程序就需要对每个需要特定权限的程序进行权限检测,写相应的代码。
在.net core中我们可以通过IAuthorizationFilter进行权限管理
首先新建一个类,例如:AdminRequired.cs
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
namespace Sample
{
public class AdminRequired : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
if(context.Filters.Any(it=>it is Microsoft.AspNetCore.Mvc.Authorization.IAllowAnonymousFilter))
{
}
else
{
string userName = context.HttpContext.Session.GetString("username");
if (string.IsNullOrEmpty(userName ))
{
RedirectResult result = new RedirectResult("~/Login");
context.Result = result;
}
else
{
}
}
}
}
}
- OnAuthorization定义了权限检测,其中通过给context.Result赋值让程序进行相应的操作,例如RedirectResult是让浏览器转跳到指定页面,OkResult是返回200状态值(不做转跳操作),另外还有其他Result,各位可自行搜索。
- 这里使用了Session,需要先在Startup.cs中定义:
public void ConfigureServices(IServiceCollection services)中添加
services.AddSession();
public void Configure(IApplicationBuilder app, IHostingEnvironment env) 中添加
app.UseSession();
然后就可以在Controller中进行权限限制了,例如我们给AdminController.cs进行权限限定:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
namespace MoMaMiBiao.Controllers
{
[TypeFilter(typeof(Sample.AdminRequired))] //声明Admin下面的方法如无例外都需要AdminRequired权限
public class AdminController : Controller
{
public IActionResult Index()
{
return View("~/wwwroot/Admin/Index.cshtml");
}
public IActionResult Welcome()
{
return View("~/wwwroot/Admin/Welcome.cshtml");
}
[TypeFilter(typeof(AllowAnonymousFilter))] //声明Login方法是完全开放,无需验证
public IActionResult Login()
{
return View("~/wwwroot/Admin/Login.cshtml");
}
}
}
在这里限定了除了声明了AllowAnonymousFilter的Login外访问都需要AdminRequired权限,根据OnAuthorization程序定义进行转跳或者其他操作。