Pindah ke https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihanli.web.extensions/accessControlhelper, silakan gunakan
WeihanLi.Web.Extensionssebagai gantinya
Karena kebutuhan proyek, pengendalian izin perlu dikontrol dalam kerangka proyek web ASP.NET MVC, sehingga komponen kontrol izin ini tersedia.
Proyek ini didasarkan pada .NETSTANDARD, dan mendukung baik ASP.NET MVC (.NET FAREMWORK 4.5 atau di atas) dan proyek inti ASP.NET (ASP.NET 2.0 atau lebih), dan didasarkan pada ASP.NET MVC dan ASP.NET Core untuk mengakses kontrol Action dan pengendalian izin elemen halaman yang diimplementasikan.
Asp.net Core mendukung lebih banyak. ASP.NET Core dapat menggunakan Taghelper untuk mengontrol akses izin elemen pada halaman, dan juga mendukung akses ke sumber daya statis melalui middleware.
Paket Nuget https://www.nuget.org/packages/weihanli.aspnetmvc.accessControlhelper/
Pasang Komponen Kontrol Izin WeihanLi.AspNetMvc.AccessControlHelper
Asp.net:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperAsp.net Core:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperTerapkan kelas Kebijakan Tampilan Kontrol Izin Anda sendiri
IControlAccessStrategyAction Access Access IResourceAccessStrategyKode contoh:
ASP.NET MVC
Inti ASP.NET
ResourceCessssstrategy
ControlAccessStrategy
Daftarkan Kebijakan Tampilan Anda Sendiri Saat Program Dimulai
Injeksi ketergantungan berdasarkan implementasi AUTOFAC dapat digunakan untuk mendaftarkan kebijakan tampilan dalam wadah IOC AUTOFAC, dan mengembalikan objek yang dapat memperoleh objek dari wadah IOC atau mengimplementasikan antarmuka IServiceProvider . Referensi: 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 ) ) ; Daftarkan Kebijakan Tampilan di file Startup , lihat 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 Izin Metode Kontrol untuk Action
AccessControl dan NoAccessControl Filter digunakan untuk mengontrol izin Action . Jika NoAccessControl didefinisikan pada tindakan tersebut, Anda dapat mengabaikan AccessControl yang ditentukan oleh level sebelumnya. Selain itu, Anda dapat mengatur AccessKey yang sesuai dengan tindakan tersebut
Contoh Penggunaan:
[ 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 ( ) ;
} Di ASP.NET Core, Anda juga dapat mengatur Policy dan menggunakan metode [AccessControl] secara langsung.
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}Kontrol tampilan elemen halaman
Untuk penggunaan yang lebih nyaman, disarankan untuk mengimpor namespace pada halaman. Metode spesifiknya adalah sebagai berikut. Lihat sampel untuk detailnya:
ASP.NET MVC
Tambahkan referensi namespace
Tambahkan namespace WeihanLi.AspNetMvc.AccessControlHelper ke file web.config di direktori tampilan proyek
< 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>Gunakan di halaman Razor
Penggunaan 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
}Jika Anda memiliki izin untuk mengakses, Anda tidak akan merender ke halaman tersebut. HTML yang diberikan ketika Anda memiliki izin untuk mengakses adalah sebagai berikut:
< 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 yang diberikan saat akses diizinkan adalah sebagai berikut:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )HTML yang diberikan saat akses diizinkan adalah sebagai berikut:
< button class =" btn btn-primary " type =" button " > 12234 </ button >Inti ASP.NET
Ekstensi htmlhelper
Tambahkan referensi namespace
Lihat namespace WeihanLi.AspNetMvc.AccessControlHelper di _viewImports.cshtml di direktori tampilan
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersGunakan di halaman pisau cukur, gunakan dengan cara yang sama seperti di atas
Taghelper
Tambahkan Referensi Taghelper
Referensi WeihanLi.AspNetMvc.AccessControlHelper Taghelper di _viewImports.cshtml di Direktori Views
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperGunakan di halaman Razor
Tambahkan asp-access ke elemen yang memerlukan kontrol izin. Jika Anda perlu mengonfigurasi akses-akses untuk mengonfigurasinya melalui asp-accesss-key , Contoh: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
Dengan cara ini, ketika Anda memiliki izin, konten ul ini akan menjadi output. Jika Anda tidak memiliki izin, itu tidak akan menjadi output. Untuk alasan keamanan, jika Anda mengonfigurasi asp-access-key , asp-access-key akan dihapus dan tidak akan output ke browser.
Jika Anda memiliki masalah menggunakannya, jangan ragu untuk menghubungi saya.
Hubungi saya: [email protected]