ASP.NET Core에서 정책 기반 권한 부여 및 뷰 페이지 링크(메뉴) 동적 표시 구현

  • 3 minutes to read

기존의 역할 기반 접근 제어 시스템을 확장하여 특정 관리자 그룹에게만 접근을 허용하는 페이지를 제공하기 위해, 역할 기반 접근 제어에 추가적으로 정책 기반 권한 부여 방식을 도입했습니다. 이 아티클에서는 그 과정과 경험을 공유하고자 합니다.

개요

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를 사용하여 사용자의 권한에 따라 동적으로 콘텐츠를 렌더링하는 기능은 사용자 경험을 풍부하게 만들어 줍니다. 이러한 기능은 보안과 사용자 인터페이스의 유연성을 모두 강화하는 중요한 요소입니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com