ASP.NET Core에서 정책 기반 권한 부여 및 뷰 페이지 링크(메뉴) 동적 표시 구현
기존의 역할 기반 접근 제어 시스템을 확장하여 특정 관리자 그룹에게만 접근을 허용하는 페이지를 제공하기 위해, 역할 기반 접근 제어에 추가적으로 정책 기반 권한 부여 방식을 도입했습니다. 이 아티클에서는 그 과정과 경험을 공유하고자 합니다.
개요
ASP.NET Core의 권한 부여 시스템은 유연하고 확장 가능하며, 개발자들이 다양한 시나리오에 맞춰 사용자의 접근 권한을 제어할 수 있도록 설계되었습니다. 이 문서에서는 ASP.NET Core에서 정책 기반의 권한 부여를 구현하고, 뷰 페이지에서 사용자의 권한에 따라 동적으로 링크나 메뉴를 표시하는 방법을 설명합니다.
1. 정책 기반 권한 부여
1.1. 정책 정의하기
Startup.cs
또는 Program.cs
파일의 ConfigureServices
메서드에서 AddAuthorization
메서드를 사용하여 정책을 정의합니다.
services.AddAuthorization(options =>
{
options.AddPolicy("YourPolicyName", policy =>
policy.RequireRole("YourRoleName"));
});
1.2. 정책을 사용하여 권한 부여
정의된 정책은 컨트롤러나 액션 메서드에 [Authorize]
특성을 사용하여 적용합니다.
[Authorize(Policy = "YourPolicyName")]
public IActionResult YourAction()
{
// 액션 로직
}
1.3. 커스텀 정책 요구사항 및 핸들러 구현
a. IAuthorizationRequirement
구현
public class CustomRequirement : IAuthorizationRequirement
{
// 요구사항에 필요한 속성 및 메서드
}
b. AuthorizationHandler
구현
public class CustomRequirementHandler : AuthorizationHandler<CustomRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CustomRequirement requirement)
{
// 요구사항 검증 로직
if (/* 조건 충족 */)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
1.4. 종속성 주입을 통한 핸들러 등록
services.AddSingleton<IAuthorizationHandler, CustomRequirementHandler>();
1.5. 복합 정책 정의 예시
"Administrators" 역할을 가진 사용자 중 특정 이메일 주소를 가진 사용자에게만 적용되는 정책:
services.AddAuthorization(options =>
{
options.AddPolicy("EmailAndRolePolicy", policy =>
policy.RequireAssertion(context =>
context.User.IsInRole("Administrators") &&
context.User.HasClaim(c =>
c.Type == ClaimTypes.Email && (c.Value == "a@a.com" || c.Value == "b@b.com"))
)
);
});
2. 뷰 페이지에서 Policy 기반 링크(메뉴) 표시
2.1. IAuthorizationService
주입
Razor 뷰에 IAuthorizationService
주입:
@inject IAuthorizationService AuthorizationService
2.2. 사용자 권한 확인
뷰에서 정책을 충족하는지 확인:
@{
var isAuthorized = await AuthorizationService.AuthorizeAsync(User, "YourPolicyName");
}
2.3. 조건부 렌더링
사용자의 권한에 따라 링크나 메뉴를 조건부로 표시:
@if (isAuthorized.Succeeded)
{
<a href="/protected-page">Protected Page</a>
}
결론
ASP.NET Core의 권한 부여 시스템은 정책 기반 접근 제어를 구현하는 데 매우 유연하며, 이를 통해 특정 역할에 속한 사용자 중에서도 추가적인 조건을 만족하는 사용자만 특정 리소스에 접근할 수 있도록 제한할 수 있습니다. 또한, 뷰 페이지에서 IAuthorizationService
를 사용하여 사용자의 권한에 따라 동적으로 콘텐츠를 렌더링하는 기능은 사용자 경험을 풍부하게 만들어 줍니다. 이러한 기능은 보안과 사용자 인터페이스의 유연성을 모두 강화하는 중요한 요소입니다.