Déménagé à https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihanli.web.extensions/accessControlhelper, veuillez utiliser
WeihanLi.Web.Extensionsà la place
En raison des besoins du projet, le contrôle de l'autorisation doit être contrôlé dans le cadre de projet Web basé sur ASP.NET MVC, donc ce composant de contrôle d'autorisation est disponible.
Le projet est basé sur .NetStandard, et prend en charge ASP.NET MVC (.NET FareMwork 4.5 ou supérieur) et ASP.NET Core Projects (ASP.NET 2.0 ou supérieur), et est basé sur ASP.NET MVC et ASP.NET Core pour accéder au contrôle de Action et le contrôle de l'autorisation des éléments de page mis en œuvre.
ASP.NET Core prend en charge plus. ASP.NET Core peut utiliser Taghelper pour contrôler l'accès à l'autorisation des éléments de la page, et prend également en charge l'accès aux ressources statiques via le middleware.
Package NuGet https://www.nuget.org/packages/weihanli.aspnetmvc.accessControlhelper/
Installez le composant de contrôle d'autorisation WeihanLi.AspNetMvc.AccessControlHelper
asp.net:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET Core:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperImplémentez votre propre classe de politique d'affichage de contrôle d'autorisation
IControlAccessStrategyAction IResourceAccessStrategyExemple de code:
ASP.NET MVC
ASP.NET Core
ResourceAccessStrategy
ControlAccessStrategy
Enregistrez votre propre politique d'affichage lorsque le programme démarre
L'injection de dépendance basée sur l'implémentation AUTOFAC peut être utilisée pour enregistrer la politique d'affichage dans le conteneur IOC de AutoFAC, et renvoyer un objet qui peut obtenir l'objet à partir du conteneur IOC ou implémenter IServiceProvider . Référence: 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 ) ) ; Enregistrez la stratégie d'affichage dans le fichier Startup , reportez-vous à 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 Autorisations de méthode de contrôle pour Action
Le filtre AccessControl et NoAccessControl est utilisé pour contrôler les autorisations d'accès à Action . Si NoAccessControl est défini sur l'action, vous pouvez ignorer AccessControl défini par le niveau précédent. De plus, vous pouvez définir AccessKey correspondant à l'action
Exemple d'utilisation:
[ 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 ( ) ;
} Dans ASP.NET Core, vous pouvez également définir Policy et utiliser directement la méthode [AccessControl] .
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}Contrôlez l'affichage des éléments de la page
Pour une utilisation plus pratique, il est recommandé d'importer l'espace de noms sur la page. La méthode spécifique est la suivante. Voir les échantillons pour plus de détails:
ASP.NET MVC
Ajouter des références d'espace de noms
Ajoutez l'espace de noms WeihanLi.AspNetMvc.AccessControlHelper au fichier web.config dans le répertoire des vues du projet
< 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>Utiliser sur la page du rasoir
Utilisation du contracture 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
}Si vous avez la permission d'y accéder, vous ne rendez pas à la page. Le HTML rendu lorsque vous avez la permission d'accès est le suivant:
< 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" } )Le HTML rendu lorsque l'accès est autorisé est le suivant:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )Le HTML rendu lorsque l'accès est autorisé est le suivant:
< button class =" btn btn-primary " type =" button " > 12234 </ button >ASP.NET Core
Extension htmlhelper
Ajouter des références d'espace de noms
Reportez-vous à l'espace de noms WeihanLi.AspNetMvc.AccessControlHelper dans _ViewImports.cshtml dans le répertoire des vues
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersUtilisez-le sur la page du rasoir, utilisez-le de la même manière que ci-dessus
Taghelper
Ajouter une référence Taghelper
Référence WeihanLi.AspNetMvc.AccessControlHelper Taghelper dans _ViewImports.cshtml Dans le répertoire des vues
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperUtiliser sur la page du rasoir
Ajoutez asp-access aux éléments qui nécessitent un contrôle d'autorisation. Si vous devez configurer l'accès à la clé pour le configurer via asp-accesss-key , exemple: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
De cette façon, lorsque vous avez la permission, le contenu de cet ul sera sorti. Si vous n'avez pas l'autorisation, il ne sera pas sorti. Pour des raisons de sécurité, si vous configurez asp-access-key , asp-access-key sera supprimée et ne sera pas sortie au navigateur.
Si vous avez des problèmes à l'utiliser, n'hésitez pas à me contacter.
Contactez-moi: [email protected]