انتقلت إلى 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 الأساسية (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
أضف مراجع مساحة الاسم
أضف مساحة الاسم 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
أضف مراجع مساحة الاسم
ارجع إلى مساحة الاسم WeihanLi.AspNetMvc.AccessControlHelper في _viewimports.cshtml في دليل العرض
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersاستخدمه على صفحة الحلاقة ، استخدمها بنفس الطريقة المذكورة أعلاه
تاجهيلبر
إضافة مرجع تاجهيلبر
المرجع WeihanLi.AspNetMvc.AccessControlHelper taghelper في _viewimports.cshtml في دليل العرض
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperاستخدم على صفحة الحلاقة
أضف asp-access إلى العناصر التي تتطلب التحكم في الإذن. إذا كنت بحاجة إلى تكوين مفتاح الوصول لتكوينه من خلال asp-accesss-key ، على سبيل المثال: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
وبهذه الطريقة ، عندما يكون لديك إذن ، سيتم إخراج محتوى هذا ul . إذا لم يكن لديك إذن ، فلن يتم الإخراج. لأسباب أمنية ، إذا قمت بتكوين asp-access-key ، فسيتم إزالة asp-access-key ولن يتم إخراجها إلى المتصفح.
إذا كانت لديك أي مشاكل في استخدامها ، فلا تتردد في الاتصال بي.
اتصل بي: [email protected]