뷰 기반 권한부여
개발자의 입장에서는 현재 사용자의 신원(Identity)을 기반으로 UI를 보여주고 숨기거나, 또는 변경해야 하는 경우도 많습니다.
MVC 뷰에서는 의존성 주입을 통해서 권한부여 서비스에 접근할 수 있습니다.
Razor 뷰에 권한부여 서비스를 주입하려면 @inject IAuthorizationService AuthorizationService
같이 @inject
지시문을 사용하면 됩니다.
권한부여 서비스를 모든 뷰에서 사용하고 싶다면 @inject
지시문을 Views
디렉터리에 위치한 _ViewImports.cshtml
파일에 작성하면 됩니다.
뷰에서 의존성 주입을 사용하는 방법에 대한 더 자세한 정보는 뷰에 서비스 주입하기 문서를 참고하시기 바랍니다.
뷰에 권한부여 서비스를 주입한 뒤에는, 리소스 기반 권한부여 문서에서 검사를 하기 위해서 AuthorizeAsync
메서드를 호출했던 것과 정확하게 동일한 방법으로 메서드를 사용하면 됩니다:
@if (await AuthorizationService.AuthorizeAsync(User, "PolicyName"))
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}
때로는 권한부여의 대상 리소스로 뷰 모델이 사용될 수도 있습니다.
그런 경우에도 리소스 기반 권한부여 문서에서 검사를 하기 위해 AuthorizeAsync
메서드를 호출했던 것과 같은 방법을 사용하면 됩니다:
@if (await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit))
{
<p><a class="btn btn-default" role="button"
href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}
이 코드를 살펴보면 권한부여에서 고려해야 할 리소스로 모델이 전달되고 있음을 확인할 수 있습니다.
경고 :
권한부여 메서드를 이용해서 UI의 일부분을 보여주거나 숨겼다고 해서 그냥 안심해서는 안됩니다.
UI 요소를 숨긴다고 해서 사용자가 리소스에 접근할 수 없다는 뜻은 아닙니다.
반드시 컨트롤러 코드에서도 사용자의 권한을 확인해야만 합니다.