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 Core Projects (ASP.NET 2.0 이상)를 지원하며 ASP.NET MVC 및 ASP.NET Core를 기반으로하여 구현 된 페이지 요소의 Action 및 권한 제어에 대한 액세스 제어를 기반으로합니다.
ASP.NET Core는 더 많은 지원을합니다. ASP.NET Core는 Taghelper를 사용하여 페이지에서 요소의 권한 액세스를 제어 할 수 있으며 미들웨어를 통해 정적 리소스에 대한 액세스를 지원할 수 있습니다.
Nuget 패키지 https://www.nuget.org/packages/weihanli.aspnetmvc.accesscontrolhelper/
권한 제어 구성 요소 WeihanLi.AspNetMvc.AccessControlHelper 설치하십시오
asp.net :
Install-Package WeihanLi.AspNetMvc.AccessControlHelperASP.NET CORE :
dotnet add package WeihanLi.AspNetMvc.AccessControlHelper자신의 권한 제어 디스플레이 정책 클래스를 구현하십시오
IControlAccessStrategy 구현Action Access Display Policy Interface IResourceAccessStrategy 를 구현하십시오샘플 코드 :
ASP.NET MVC
asp.net 코어
ResourcecessStrategy
ControlAccessStrategy
프로그램이 시작될 때 자신의 디스플레이 정책을 등록하십시오
AutoFAC 구현을 기반으로 한 종속성 분사는 AutoFAC의 IOC 컨테이너에 디스플레이 정책을 등록하고 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/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 Action 에 대한 제어 방법 권한
AccessControl 및 NoAccessControl 필터는 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 ( ) ;
} ASP.NET Core에서 Policy 설정하고 [AccessControl] 메소드를 직접 사용할 수도 있습니다.
// [Authorize(AccessControlHelperConstants.PolicyName)]
[ Authorize ( "AccessControl" ) ]
public IActionResult Contact ( )
{
ViewData [ "Message" ] = "Your contact page." ;
return View ( ) ;
}페이지 요소 표시를 제어하십시오
보다 편리하게 사용하려면 페이지에서 네임 스페이스를 가져 오는 것이 좋습니다. 특정 방법은 다음과 같습니다. 자세한 내용은 샘플을 참조하십시오.
ASP.NET MVC
네임 스페이스 참조를 추가합니다
Namespace 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 코어
htmlhelper 확장
네임 스페이스 참조를 추가합니다
views 디렉토리에서 _viewimports.cshtml 에서 네임 스페이스 WeihanLi.AspNetMvc.AccessControlHelper 를 참조하십시오.
@using AccessControlDemo
@using WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers면도기 페이지에서 사용하고 위와 같은 방식으로 사용하십시오.
Taghelper
Taghelper 참조를 추가하십시오
참조 WeihanLi.AspNetMvc.AccessControlHelper taghelper in _viewimports.cshtml views directory
@using AccessControlDemo
@addTagHelper * , Microsoft . AspNetCore . Mvc . TagHelpers
@addTagHelper * , WeihanLi . AspNetMvc . AccessControlHelper // add WeihanLi.AspNetMvc.AccessControlHelper TagHelper면도기 페이지에서 사용하십시오
권한 제어가 필요한 요소에 asp-access 추가하십시오. asp-accesss-key 통해 구성하도록 Access-Key를 구성 해야하는 경우, 예 : <ul class="list-group" asp-access asp-access-key="12334">...</ul>
이런 식으로 허가를 받으면이 ul 의 내용이 출력됩니다. 허가가 없으면 출력되지 않습니다. 보안상의 이유로 asp-access-key 구성하면 asp-access-key 제거되어 브라우저에 출력되지 않습니다.
사용하는 데 문제가 있으시면 언제든지 저에게 연락하십시오.
저에게 연락하십시오 : [email protected]