ASP.NET Core MVC에서 뷰 기반 권한 부여

개발자는 종종 현재 사용자 ID를 기준으로 UI를 표시하거나 숨기거나 수정하려고 합니다. 종속성 주입을 통해 MVC 뷰 내에서 권한 부여 서비스에 액세스할 수 있습니다. 권한 부여 서비스를 Razor 뷰에 삽입하려면 @inject 지시문을 사용합니다.

@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService

모든 보기에서 권한 부여 서비스를 원하는 경우 지시문을 _ViewImports.cshtml Views 디렉터리의 파일에 배치 @inject 합니다. 자세한 내용은 보기에 종속성 주입을 참조하세요.

삽입된 권한 부여 서비스를 사용하여 리소스 기반 권한 부여 중에 확인하는 것과 동일한 방식으로 AuthorizeAsync를 호출합니다.

@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)
{
    <p>This paragraph is displayed because you fulfilled PolicyName.</p>
}

경우에 따라 리소스가 뷰 모델이 됩니다. 리소스 기반 권한 부여 중에 확인하는 것과 정확히 동일한 방법으로 AuthorizeAsync를 호출합니다.

@if ((await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)).Succeeded)
{
    <p><a class="btn btn-default" role="button"
        href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}

위의 코드에서 모델은 정책 평가를 고려해야 하는 리소스로 전달됩니다.

경고

앱의 UI 요소에 대한 표시 여부를 단독 권한 부여 확인으로 전환하는 것을 사용하지 마세요. UI 요소를 숨기면 연결된 컨트롤러 작업에 대한 액세스를 완전히 방지할 수 없습니다. 예를 들어 위의 코드 조각에서 단추를 살펴보겠습니다. 사용자는 상대 리소스 URL이 /Document/Edit/1인 것으로 알고 있는 경우 Edit 작업 메서드를 호출할 수 있습니다. 이러한 이유로 Edit 작업 메서드는 자체 권한 부여 검사를 수행해야 합니다.