Se mudó a https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihanli.web.extensions/accesscontrolhelper, use
WeihanLi.Web.Extensionsen su lugar
Debido a las necesidades del proyecto, el control de permisos debe controlarse en el marco de proyectos web basado en ASP.NET MVC, por lo que este componente de control de permisos está disponible.
El proyecto se basa en .NetStandard y admite tanto los proyectos ASP.NET MVC (.NET Faremwork 4.5 o arriba) como ASP.NET Core (ASP.NET 2.0 o arriba), y se basa en ASP.NET MVC y ASP.NET Core para acceder al control de Action y el control de los elementos de la página implementados.
ASP.NET Core admite más. ASP.NET Core puede usar Taghelper para controlar el acceso de permiso de los elementos en la página, y también admite el acceso a los recursos estáticos a través de middleware.
Paquete nuget https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrolhelper/
Instalar componente de control de permiso WeihanLi.AspNetMvc.AccessControlHelper
ASP.NET:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET Core:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperImplemente su propia clase de política de visualización de control de permiso
IControlAccessStrategyAction Access IResourceAccessStrategyCódigo de muestra:
ASP.NET MVC
ASP.NET Core
ResoCcessStrategy
ControlAccessstrategy
Registre su propia política de visualización cuando comience el programa
La inyección de dependencia basada en la implementación de AutoFAC se puede utilizar para registrar la política de visualización en el contenedor IOC de AutoFAC y devolver un objeto que pueda obtener el objeto del contenedor IOC o implementar IServiceProvider . Referencia: 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 ) ) ; Registre la política de visualización en el archivo Startup , consulte 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 Permisos de método de control para Action
AccessControl y NoAccessControl Filter se utilizan para controlar los permisos de acción de Action . Si NoAccessControl se define en la acción, puede ignorar AccessControl definido por el nivel anterior. Además, puede establecer AccessKey correspondiente a la acción
Ejemplo de uso:
[ 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 ( ) ;
} En ASP.NET Core, también puede establecer Policy y usar el método [AccessControl] directamente.
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}Controlar la visualización de elementos de página
Para un uso más conveniente, se recomienda importar el espacio de nombres en la página. El método específico es el siguiente. Ver muestras para más detalles:
ASP.NET MVC
Agregar referencias de espacio de nombres
Agregue el espacio de nombres WeihanLi.AspNetMvc.AccessControlHelper al archivo web.config en el directorio de vistas del proyecto
< 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>Usar en la página de Razor
Uso 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 tiene permiso para acceder, no será de la página. El HTML renderizado cuando tiene permiso para acceder es el siguiente:
< 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" } )El HTML renderizado cuando el acceso está autorizado es el siguiente:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )El HTML renderizado cuando el acceso está autorizado es el siguiente:
< button class =" btn btn-primary " type =" button " > 12234 </ button >ASP.NET Core
Extensión htmlhelper
Agregar referencias de espacio de nombres
Consulte el espacio de nombres WeihanLi.AspNetMvc.AccessControlHelper en _viewImports.cshtml en el directorio de vistas
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersÚselo en la página Razor, úselo de la misma manera que la anterior
Taghelper
Agregar referencia de Taghelper
Referencia WeihanLi.AspNetMvc.AccessControlHelper taghelper en _viewimports.cshtml en el directorio de vistas
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperUsar en la página de Razor
Agregue asp-access a elementos que requieren control de permiso. Si necesita configurar la tecla de acceso para configurarlo a través de asp-accesss-key , ejemplo: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
De esta manera, cuando tenga permiso, el contenido de este ul se emitirá. Si no tiene permiso, no se emitirá. Por razones de seguridad, si configura asp-access-key , asp-access-key se eliminará y no se emitirá al navegador.
Si tiene algún problema para usarlo, no dude en ponerse en contacto conmigo.
Contáctame: [email protected]