ย้ายไปที่ https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihanli.web.extensions/accesscontrolhelper โปรดใช้
WeihanLi.Web.Extensionsแทน
เนื่องจากความต้องการของโครงการจำเป็นต้องมีการควบคุมการควบคุมการอนุญาตในเฟรมเวิร์กเว็บโครงการ ASP.NET MVC ที่ใช้ดังนั้นส่วนประกอบการควบคุมการอนุญาตนี้จึงมีอยู่
โครงการขึ้นอยู่กับ. NETSTANDARD และสนับสนุนทั้ง ASP.NET MVC (.NET FAREMWORK 4.5 หรือสูงกว่า) และ ASP.NET CORE Project (ASP.NET 2.0 หรือสูงกว่า) และขึ้นอยู่กับ ASP.NET MVC และ ASP.NET Core เพื่อเข้าถึงการควบคุม Action ดำเนินการ
ASP.NET CORE รองรับมากขึ้น ASP.NET CORE สามารถใช้ Taghelper เพื่อควบคุมการเข้าถึงองค์ประกอบที่ได้รับอนุญาตบนหน้าและยังรองรับการเข้าถึงทรัพยากรคงที่ผ่านมิดเดิลแวร์
แพ็คเกจ nuget https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrolhelper/
ติดตั้งส่วนประกอบควบคุมการอนุญาต WeihanLi.AspNetMvc.AccessControlHelper
asp.net:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET CORE:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperใช้คลาสนโยบายการแสดงผลการควบคุมการอนุญาตของคุณเอง
IControlAccessStrategyAction เทอร์เฟซนโยบายการเข้าถึงการดำเนินการ IResourceAccessStrategyรหัสตัวอย่าง:
ASP.NET MVC
ASP.NET CORE
Resourceaccessstrategy
Controlaccessstrategy
ลงทะเบียนนโยบายการแสดงผลของคุณเองเมื่อโปรแกรมเริ่มต้น
การฉีดขึ้นอยู่กับการใช้งาน AutoFAC สามารถใช้ในการลงทะเบียนนโยบายการแสดงผลในคอนเทนเนอร์ IOC ของ AutoFAC และส่งคืนวัตถุที่สามารถรับวัตถุจากคอนเทนเนอร์ IOC หรือใช้อินเตอร์เฟส IServiceProvider การอ้างอิง: https://github.com/weihanli/accesscontrolhelper/blob/master/samples/powercontroldemo/global.asax.cs#l23
//autofac ContainerBuilder
var builder = new ContainerBuilder ( ) ;
// etc...
// register accesss control
builder . RegisterType < ResourceAccessStrategy > ( ) . As < IResourceAccessStrategy > ( ) ;
builder . RegisterType < ControlAccessStrategy > ( ) . As < IControlAccessStrategy > ( ) ;
var container = builder . Build ( ) ;
// Important
AccessControlHelper . RegisterAccessControlHelper < ActionAccessStrategy , ControlAccessStrategy > ( type => container . Resolve ( type ) ) ; ลงทะเบียนนโยบายการแสดงผลในไฟล์ Startup โปรดดูที่ https://github.com/weihanli/accesscontrolhelper/blob/master/samples/accesscontroldemo/startup.cs
// ConfigureServices
services . AddAccessControlHelper < ResourceAccessStrategy , ControlAccessStrategy > ( ) ;
// 自己注册服务,如果只用到资源访问,比如只有 API 可以只注册 IResourceAccessStrategy,反之如果只用到视图上的权限控制可以只注册 IControlAccessStrategy
//services.TryAddScoped<IResourceAccessStrategy, ActionAccessStrategy>();
//services.TryAddSingleton<IControlAccessStrategy, ControlAccessStrategy>();
//services.AddAccessControlHelper();
// 自定义服务生命周期
// services.AddAccessControlHelper<ActionAccessStrategy, ControlAccessStrategy>(ServiceLifetime.Scoped, ServiceLifetime.Singleton);
// asp.net core 【推荐用法】
services . AddAccessControlHelper ( )
. AddResourceAccessStrategy < ResourceAccessStrategy > ( ServiceLifetime . Scoped )
. AddControlAccessStrategy < ControlAccessStrategy > ( )
;
// Configure 中间件,可选,当你需要一个全局的 access control 时使用(会忽略控制器上的 AllowAnonymous)
// app.UseAccessControlHelper(); // use this only when you want to have a global access control especially for static files สิทธิ์ในการควบคุมวิธีการสำหรับ Action
ตัวกรอง AccessControl และ NoAccessControl ใช้เพื่อควบคุมสิทธิ์การเข้าถึงของ Action หาก NoAccessControl ถูกกำหนดไว้ในการดำเนินการคุณสามารถเพิกเฉยต่อ AccessControl ที่กำหนดโดยระดับก่อนหน้า นอกจากนี้คุณสามารถตั้งค่า AccessKey ที่สอดคล้องกับการกระทำ
ตัวอย่างการใช้งาน:
[ NoAccessControl ]
public IActionResult Index ( )
{
return View ( ) ;
}
[ AccessControl ]
public IActionResult About ( )
{
ViewData [ "Message" ] = "Your application description page." ;
return View ( ) ;
}
[ AccessControl ( AccessKey = "Contact" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
} ใน ASP.NET Core คุณสามารถตั้ง Policy และใช้วิธี [AccessControl] โดยตรง
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}ควบคุมการแสดงผลขององค์ประกอบหน้า
สำหรับการใช้งานที่สะดวกยิ่งขึ้นขอแนะนำให้นำเข้าเนมสเปซบนหน้า วิธีการเฉพาะมีดังนี้ ดูตัวอย่างสำหรับรายละเอียด:
ASP.NET MVC
เพิ่มการอ้างอิงเนมสเปซ
เพิ่ม namespace WeihanLi.AspNetMvc.AccessControlHelper ลงในไฟล์ web.config ในไดเรกทอรีมุมมองของโครงการ
< system .web.webPages.razor>
< pages pageBaseType = " System.Web.Mvc.WebViewPage " >
< namespaces >
< add namespace = " System.Web.Mvc " />
< add namespace = " System.Web.Mvc.Ajax " />
< add namespace = " System.Web.Mvc.Html " />
< add namespace = " System.Web.Optimization " />
< add namespace = " System.Web.Routing " />
< add namespace = " PowerControlDemo " />
< add namespace = " WeihanLi.AspNetMvc.AccessControlHelper " /> <!-- add WeihanLi.AspNetMvc.AccessControlHelper -->
</ namespaces >
</ pages >
</ system .web.webPages.razor>ใช้ในหน้ามีดโกน
การใช้ SparkContainer
@using ( Html . SparkContainer ( "div" , new { @class = "container" , custom - attribute = "abcd" } ) )
{
@Html . Raw ( "1234" )
}
@using ( Html . SparkContainer ( "span" , new { @class = "custom_p111" } , "F7A17FF9-3371-4667-B78E-BD11691CA852" ) )
{
@ : 12344
}หากคุณได้รับอนุญาตให้เข้าถึงคุณจะไม่แสดงผลในหน้า HTML ที่แสดงผลเมื่อคุณได้รับอนุญาตให้เข้าถึงมีดังนี้:
< div class =" container " custom-attribute =" abcd " > 1234 </ div >
< span class =" custome_p111 " > 12344 </ span > SparkLink
@Html . SparkLink ( "Learn about me »" , "http://weihanli.xyz" , new { @class = "btn btn-default" } )HTML ที่แสดงผลเมื่อการเข้าถึงได้รับอนุญาตมีดังนี้:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )HTML ที่แสดงผลเมื่อการเข้าถึงได้รับอนุญาตมีดังนี้:
< button class =" btn btn-primary " type =" button " > 12234 </ button >ASP.NET CORE
ส่วนขยาย htmlhelper
เพิ่มการอ้างอิงเนมสเปซ
อ้างถึง namespace WeihanLi.AspNetMvc.AccessControlHelper ใน _viewimports.cshtml ในไดเรกทอรี Views
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersใช้ในหน้ามีดโกนใช้แบบเดียวกับด้านบน
Taghelper
เพิ่มการอ้างอิง Taghelper
การอ้างอิง WeihanLi.AspNetMvc.AccessControlHelper taghelper ใน _viewimports.cshtml ในไดเรกทอรี Views
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperใช้ในหน้ามีดโกน
เพิ่ม asp-access ไปยังองค์ประกอบที่ต้องมีการควบคุมการอนุญาต หากคุณต้องการกำหนดค่า Access-Key เพื่อกำหนดค่าผ่าน asp-accesss-key ตัวอย่าง: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
ด้วยวิธีนี้เมื่อคุณได้รับอนุญาตเนื้อหาของ ul นี้จะถูกส่งออก หากคุณไม่ได้รับอนุญาตมันจะไม่ถูกส่งออก ด้วยเหตุผลด้านความปลอดภัยหากคุณกำหนดค่า asp-access-key , asp-access-key จะถูกลบออกและจะไม่ถูกส่งไปยังเบราว์เซอร์
หากคุณมีปัญหาในการใช้งานโปรดติดต่อฉัน
ติดต่อฉัน: [email protected]