Verlegt auf https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihhanli.web.extensions/accesscontrolHelper
WeihanLi.Web.Extensionsbitte verwenden
Aufgrund der Projektanforderungen muss die Berechtigungssteuerung im ASP.NET-MVC-basierten Webprojekt-Framework gesteuert werden, sodass diese Berechtigungssteuerkomponente verfügbar ist.
Das Projekt basiert auf .NetStandard und unterstützt sowohl ASP.NET MVC (.NET Faremwork 4.5 oder höher) als auch ASP.NET -Kernprojekte (ASP.NET 2.0 oder höher) und basiert auf ASP.NET -MVC und ASP.NET -Kern, um die implementierte Action und die Berechtigungsregelung der implementierten Seitenelemente zuzugreifen.
ASP.Net Core unterstützt mehr. ASP.NET CORE kann TagHelper verwenden, um den Berechtigungszugriff von Elementen auf der Seite zu steuern, und unterstützt den Zugriff auf statische Ressourcen über Middleware.
Nuget -Paket https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrolHelper/
Installieren Sie die Berechtigungssteuerungskomponente WeihanLi.AspNetMvc.AccessControlHelper
ASP.NET:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET CORE:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperImplementieren Sie Ihre eigene Richtlinienklasse für die Berechtigungssteuerung für die Anzeige
IControlAccessStrategyAction Richtlinienschnittstelle IResourceAccessStrategyBeispielcode:
ASP.NET MVC
ASP.NET CORE
ResourceAccessStrategy
ControlAccessStrategy
Registrieren Sie Ihre eigene Anzeigerichtlinie, wenn das Programm startet
Die Abhängigkeitsinjektion basierend auf der AutoFAC -Implementierung kann verwendet werden, um die Anzeigerichtlinie im IOC -Container von AutoFAC zu registrieren und ein Objekt zurückzugeben, das das Objekt aus dem IOC -Container abrufen oder IServiceProvider -Schnittstelle implementieren kann. Referenz: 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 ) ) ; Registrieren Sie die Anzeigerichtlinie in der Startup . Weitere Informationen finden Sie unter 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 Kontrollmethodenberechtigungen für Action
AccessControl und NoAccessControl Filter werden verwendet, um die Zugangsberechtigungen der Action zu steuern. Wenn NoAccessControl in der Aktion definiert ist, können Sie AccessControl ignorieren. Darüber hinaus können Sie AccessKey der der Aktion entspricht
Beispiel der Nutzung:
[ 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 ( ) ;
} In ASP.NET Core können Sie auch Policy festlegen und die [AccessControl] -Methode direkt verwenden.
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}Steuern Sie die Anzeige von Seitenelementen
Für bequemere Verwendung wird empfohlen, den Namespace auf der Seite zu importieren. Die spezifische Methode ist wie folgt. Weitere Informationen finden Sie unter Beispiele:
ASP.NET MVC
Fügen Sie den Namespace Referenzen hinzu
Fügen Sie den Namespace WeihanLi.AspNetMvc.AccessControlHelper in der Datei web.config im Ansichtsverzeichnis des Projekts hinzu
< 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>Verwendung auf der Rasierseite
Nutzung 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
}Wenn Sie zugreifen können, werden Sie nicht zur Seite rendern. Das gerenderte HTML, wenn Sie die Erlaubnis zum Zugriff haben, lautet wie folgt:
< 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" } )Das gerenderte HTML, wenn der Zugriff autorisiert ist, lautet wie folgt:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )Das gerenderte HTML, wenn der Zugriff autorisiert ist, lautet wie folgt:
< button class =" btn btn-primary " type =" button " > 12234 </ button >ASP.NET CORE
HTMLHelper -Erweiterung
Fügen Sie den Namespace Referenzen hinzu
Siehe den Namespace WeihanLi.AspNetMvc.AccessControlHelper in _viewimports.cshtml im View -Verzeichnis
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersVerwenden Sie es auf der Razor -Seite und verwenden Sie es genauso wie oben
Taghelper
Fügen Sie TagHelper Referenz hinzu
Referenz WeihanLi.AspNetMvc.AccessControlHelper TagHelper in _viewimports.cshtml im View -Verzeichnis
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperVerwendung auf der Rasierseite
Fügen Sie asp-access zu Elementen hinzu, die eine Berechtigungsregelung erfordern. Wenn Sie Access-Key konfigurieren müssen, um ihn durch asp-accesss-key <ul class="list-group" asp-access asp-access-key="12334">...</ul> Key zu konfigurieren
Auf diese Weise wird bei der Erlaubnis der Inhalt dieser ul ausgegeben. Wenn Sie keine Erlaubnis haben, wird dies nicht ausgegeben. Aus Sicherheitsgründen wird der asp-access-key entfernt, wenn Sie asp-access-key konfigurieren, entfernt und wird nicht an den Browser ausgegeben.
Wenn Sie Probleme verwenden, können Sie mich gerne kontaktieren.
Kontaktieren Sie mich: [email protected]