파트 7: 멤버십과 권한

등록일시: 2012-08-17 13:34,  수정일시: 2013-09-12 23:11
조회수: 4,218
이 문서는 ASP.NET MVC 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

MVC 뮤직 스토어 응용 프로그램은 ASP.NET MVC와 Visual Studio for Web Development를 소개하고, 그 사용법을 단계별로 살펴보기 위한 자습용 응용 프로그램으로, 온라인 음반 판매 기능을 비롯하여, 기초적인 사이트 관리, 사용자 로그인, 장바구니 기능 등이 구현된 간단한 전자상거래 사이트 예제입니다.

본 자습서 시리즈에서는 ASP.NET MVC 뮤직 스토어 응용 프로그램을 구축하기 위해서 필요한 모든 단계들을 자세하게 살펴볼 것입니다. 이번 파트 7에서는 멤버십과 권한에 관해서 살펴봅니다.

지금 이 상태에서는 MVC 뮤직 스토어 사이트를 방문한 모든 사용자들이 StoreManager 컨트롤러에 접근할 수 있습니다. 이번 파트에서는 이 문제점을 보완해서 사이트 관리자만 StoreManager 컨트롤러에 접근할 수 있도록 권한을 제한해보도록 하겠습니다.

Account 컨트롤러 및 뷰 추가하기

완전한 ASP.NET MVC 3 Web Application 템플릿과, 본 자습서에서 MVC 뮤직 스토어 프로젝트를 생성할 때 선택했던 ASP.NET MVC 3 Empty Web Application 템플릿 간의 몇 가지 중요한 차이점들 중 하나는, 빈(Empty) 템플릿에는 Account 컨트롤러(즉, AccountController 클래스)가 포함되어 있지 않다는 것입니다. 본문에서는 작업 상의 편의를 위해, 완전한 ASP.NET MVC 3 Web Application 템플릿을 이용해서 새롭게 만든 ASP.NET MVC 응용 프로그램에서 몇 개의 파일을 복사해서 Account 컨트롤러를 추가해보도록 하겠습니다.

먼저, ASP.NET MVC 3 Web Application 템플릿을 사용해서 새로운 ASP.NET MVC 응용 프로그램을 생성한 다음, 아래의 파일들을 MVC 뮤직 스토어 프로젝트의 동일 디렉터리로 복사합니다:

  1. Controllers 디렉터리의 AccountController.cs 파일을 복사합니다.
  2. Models 디렉터리의 AccountModels.cs 파일을 복사합니다.
  3. Views 디렉터리 하위에 Account라는 이름의 디렉터리를 만들고, 네 개의 뷰 파일들을 모두 복사합니다.

그런 다음, 이 컨트롤러 클래스와 모델 클래스들의 네임스페이스를 MvcMusicStore로 시작하도록 변경해야 합니다. 즉, AccountController 클래스는 MvcMusicStore.Controllers 네임스페이스를, 그리고 AccountModels 클래스는 MvcMusicStore.Models 네임스페이스를 사용하도록 변경해야 합니다.

노트: 이 파일들은 본 자습서의 파트 3에서 사이트의 디자인과 관련된 파일들을 복사하기 위해서 다운로드 받았던 MvcMusicStore-Assets.zip 파일에도 포함되어 있습니다. 다만, 이 파일들은 방금 설명한 위치가 아닌 MvcMusicStore-Assets.zip 파일의 Code 디렉터리 하위에 위치해있습니다.

파일 복사 작업을 모두 마치고 나면, 솔루션 탐색기의 모습은 다음과 같을 것입니다:

ASP.NET 구성 사이트를 이용해서 관리자 추가하기

당연한 얘기겠지만, 웹사이트에 권한을 적용하려면, 먼저 적당한 권한을 갖고 있는 사용자부터 만들어야 합니다. 사용자를 생성할 수 있는 가장 간단한 방법은 내장되어 있는 ASP.NET 구성 웹사이트를 이용하는 것입니다.

이 ASP.NET 웹 사이트 관리 도구를 실행하려면, 솔루션 탐색기에서 다음과 같은 모양의 아이콘을 마우스로 클릭합니다.

그러면, ASP.NET 구성 웹사이트가 실행되는데, 먼저 홈(Home) 화면에서 보안(Security) 탭을 클릭한 다음, 화면 중앙에 위치한 "역할 사용(Enable roles)" 링크를 클릭합니다.

그리고, "역할 만들기 또는 관리(Create or Manage roles)" 링크를 클릭합니다.

새 역할 이름에 "Administrator"라고 입력한 다음, "역할 추가(Add Role)" 버튼을 누릅니다.

다시 "뒤로(Back)" 버튼을 클릭해서 이전 화면으로 돌아간 다음, 이번에는 좌측의 "사용자 만들기(Create user)" 링크를 클릭합니다.

그리고, 화면 좌측의 사용자 정보 필드에 다음의 정보들을 입력합니다:

필드
User Name Administrator
Password password123!
Confirm Password password123!
E-mail (실제로 존재하는 임의의 전자우편 주소)
Security Question (여러분이 원하는 임의의 질문)
Security Answer (여러분이 원하는 임의의 답변)
노트: 물론, 원한다면 본문에 제시된 비밀번호 대신, 여러분이 선호하는 비밀번호를 지정할 수도 있습니다. 본문의 비밀번호는 단지 하나의 사례일 뿐이며, CodePlex 포럼에서 사용되는 구조를 갖고 있습니다. 기본 비밀번호 보안 설정에 따라 비밀번호는 7 자리 이상의 문자로 이루어져 있어야만 하고, 비-알파벳 문자가 포함되어 있어야만 합니다.

마지막으로, 이 사용자에게 Administrator 역할을 부여한 다음, "사용자 만들기(Create User)" 버튼을 클릭합니다.

그러면, 사용자가 정상적으로 생성되었다는 내용의 메시지가 나타날 것입니다.

모든 작업을 마쳤으면 브라우저 창을 닫습니다.

역할 기반 인증

이제 [Authorize] 어트리뷰트를 적용해서 StoreManagerController 클래스에 대한 사용자의 접근을 제한할 수 있습니다. 다음과 같이 [Authorize] 어트리뷰트를 적용하면, 오직 Administrator 역할에 포함된 사용자만 이 클래스의 액션에 접근이 가능하게 됩니다.

[Authorize(Roles = "Administrator")] 
public class StoreManagerController : Controller 
{ 
    // 컨트롤러 코드 
}
노트: [Authorize] 어트리뷰트는 Controller 클래스 수준뿐만 아니라, 액션 메서드 각각에 대해서 개별적으로 지정할 수도 있습니다.

이제부터는 /StoreManager로 이동하면, 다음과 같은 Log On 대화 상자가 나타나게 됩니다:

본문에서 새로 만든 관리자 계정으로 로그온하면, 예전처럼 음반 정보 편집 화면으로 이동할 수 있습니다.

질문이나 의견이 있으시면 http://mvcmusicstore.codeplex.com/을 방문해주시기 바랍니다.