Переехал на 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 и CORE ASP.NET для управления управлением Action и управлением разрешением элементов страниц.
Asp.net Core поддерживает больше. ASP.NET Core может использовать Taghelper для управления доступом к разрешению элементов на странице, а также поддерживает доступ к статическим ресурсам через промежуточное программное обеспечение.
Пакет Nuget https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrollehelper/
Установить компонент управления разрешением WeihanLi.AspNetMvc.AccessControlHelper
asp.net:
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET CORE:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelperРеализуйте свой собственный класс Политики Политики дисплеев
IControlAccessStrategyAction Access Display IResourceAccessStrategyПример кода:
ASP.NET MVC
ASP.NET CORE
ResourceAccessTrategy
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/accesscontrodemo/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 Filter используются для управления разрешениями доступа к 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 ( ) ;
} В Core ASP.NET вы также можете установить 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Используйте его на странице бритвы, используйте его так же, как и выше
Taghelper
Добавить ссылку на тагельпера
Ссылка на WeihanLi.AspNetMvc.AccessControlHelper Taghelper in _viewimports.cshtml в каталоге просмотров
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelperИспользуйте на странице бритвы
Добавьте asp-access в элементы, которые требуют контроля разрешения. Если вам нужно настроить Access-Key, чтобы настроить его через asp-accesss-key , пример: <ul class="list-group" asp-access asp-access-key="12334">...</ul>
Таким образом, когда у вас есть разрешение, содержание этого ul будет выводится. Если у вас нет разрешения, оно не будет выводиться. По соображениям безопасности, если вы настраиваете asp-access-key , asp-access-key будет удален и не будет выводиться в браузер.
Если у вас есть какие -либо проблемы с его использованием, пожалуйста, не стесняйтесь обращаться ко мне.
Свяжитесь со мной: [email protected]