다음을 통해 공유


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

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

@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService

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

삽입된 권한 부여 서비스를 사용하여 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>
}

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

Warning

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