Mudou -se para https://github.com/weihanli/weihanli.web.extensions/tree/dev/src/weihanli.web.extensions/accesscontrolhelper, use
WeihanLi.Web.Extensionsem vez disso
Devido às necessidades do projeto, o controle de permissão precisa ser controlado na estrutura do projeto da web baseada em MVC do ASP.NET, para que este componente de controle de permissão esteja disponível.
O projeto é baseado no .NetStandard e suporta o ASP.NET MVC (.NET FAREMWORK 4.5 ou acima) e os projetos principais do ASP.NET (ASP.NET 2.0 ou acima) e é baseado nos elementos do ASP.NET MVC e ASP.NET para acessar o controle da Action e do controle de permissão dos elementos de página implementados.
Asp.net Core suporta mais. O ASP.NET Core pode usar o TagHelper para controlar o acesso à permissão dos elementos na página e também suporta o acesso a recursos estáticos através do middleware.
NUGET PACOTET https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrultrultrultrultrultrultrultrultrultrultrultrultrultrultrultrultrultrultRoLHELPER/
Instale o componente de controle de permissão WeihanLi.AspNetMvc.AccessControlHelper
ASP.NET:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET CORE:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperImplementar sua própria classe de política de exibição de controle de permissão
IControlAccessStrategyAction IResourceAccessStrategyCódigo de exemplo:
ASP.NET MVC
ASP.NET CORE
ResourceAccessStrategy
ControlAccessStrategy
Registre sua própria política de exibição quando o programa começar
A injeção de dependência com base na implementação do AutoFAC pode ser usada para registrar a política de exibição no contêiner do IOC do Autofac e retornar um objeto que pode obter o objeto do contêiner do IOC ou implementar IServiceProvider . Referência: 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 a política de exibição no arquivo 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 Método de controle permissões para Action
O filtro AccessControl e NoAccessControl são usados para controlar as permissões de Action de acesso. Se NoAccessControl for definido na ação, você poderá ignorar AccessControl definido pelo nível anterior. Além disso, você pode definir AccessKey correspondente à ação
Exemplo 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 ( ) ;
} No núcleo do ASP.NET, você também pode definir Policy e usar o método [AccessControl] diretamente.
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}Controle a exibição dos elementos da página
Para uso mais conveniente, é recomendável importar o espaço para nome na página. O método específico é o seguinte. Veja amostras para obter detalhes:
ASP.NET MVC
Adicione referências de espaço para nome
Adicione o espaço para nome WeihanLi.AspNetMvc.AccessControlHelper ao arquivo web.config no diretório de visualizações do projeto
< 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>Use na página de barbear
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
}Se você tiver permissão para acessar, não renderá à página. O HTML renderizado quando você tem permissão para acessar é o seguinte:
< 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" } )O HTML renderizado quando o acesso é autorizado é o seguinte:
< a class =" btn btn-default " href =" http://weihanli.xyz " > Learn about me » </ a > SparkButton
@Html . SparkButton ( "12234" , new { @class = "btn btn-primary" } )O HTML renderizado quando o acesso é autorizado é o seguinte:
< button class =" btn btn-primary " type =" button " > 12234 </ button >ASP.NET CORE
Extensão HtmlHelper
Adicione referências de espaço para nome
Consulte o espaço para nome WeihanLi.AspNetMvc.AccessControlHelper em _viewimports.cshtml no diretório de visualizações
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpersUse -o na página de barbear, use da mesma maneira que acima
Taghelper
Adicione a referência do Taghelper
Referência WeihanLi.AspNetMvc.AccessControlHelper taghelper em _viewimports.cshtml no diretório Views
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperUse na página de barbear
Adicione asp-access aos elementos que requerem controle de permissão. Se você precisar configurar a tecla de acesso para configurá-la através do asp-accesss-key , exemplo: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
Dessa forma, quando você tiver permissão, o conteúdo deste ul será emitido. Se você não tiver permissão, ele não será emitido. Por motivos de segurança, se você configurar asp-access-key , asp-access-key será removida e não será emitida para o navegador.
Se você tiver algum problema, não hesite em entrar em contato comigo.
Entre em contato comigo: [email protected]