다음을 통해 공유


방법: RIA Services에서 역할 사용

이 항목에서는 이전에 인증을 사용하도록 설정한 경우 WCF RIA Services 솔루션에서 역할을 사용하도록 설정하는 방법을 보여 줍니다. 인증된 사용자의 역할만 검색할 수 있습니다. 인증을 위해 솔루션을 구성하려면 방법: RIA Services에서 인증 사용을 참조하십시오. RequiresRoleAttribute 특성을 도메인 작업의 메서드에 적용하여 도메인 작업에 대한 액세스를 역할의 멤버로 제한합니다.

역할은 특정 리소스에 액세스할 수 있는 인증된 사용자의 그룹을 지정하는 데 사용됩니다. RIA Services 의 역할은 ASP.NET의 역할을 바탕으로 합니다. 역할에 대한 자세한 내용은 역할 관리 이해를 참조하십시오.

서버 프로젝트를 구성하려면

  1. 서버 프로젝트에서 Web.config 파일을 엽니다.

  2. <system.web> 섹션에서 <roleManager> 요소를 추가하여 관리자 역할을 사용하도록 설정합니다.

    다음 예제에서는 관리자 역할을 사용하도록 설정하는 방법을 보여 줍니다.

    <system.web>
      <authentication mode="Forms"></authentication>
      <roleManager enabled="true"></roleManager>
    </system.web>
    
  3. 멤버 자격 데이터베이스에서 필요한 역할을 만들고 필요에 따라 역할에 사용자를 할당합니다.

    자세한 내용은 역할 관리 이해를 참조하십시오. 역할을 만드는 예제를 보려면 연습: Silverlight 비즈니스 응용 프로그램에서 인증 서비스 사용 또는 연습: Silverlight 탐색 응용 프로그램에서 인증 서비스 사용을 참조하십시오.

  4. 도메인 작업에 대한 액세스를 지정된 역할의 멤버로만 제한하려면 RequiresRoleAttribute 특성을 도메인 작업에 적용합니다.

    다음 예제에서는 Managers 역할의 멤버만 도메인 작업에 액세스할 수 있도록 지정합니다.

    <RequiresRole("Managers")> _
    Public Function GetCustomers() As IQueryable(Of Customer)
        Return Me.ObjectContext.Customers
    End Function
    
    [RequiresRole("Managers")]
    public IQueryable<Customer> GetCustomers()
    {
        return this.ObjectContext.Customers;
    }
    

클라이언트 프로젝트에서 역할에 액세스하려면

  1. 사용자가 필요한 역할에 속하는지 확인하려면 Roles 속성에 액세스하거나 WebContext.Current.User 개체에 대해 IsInRole 메서드를 호출합니다.

    다음 예제에서는 도메인 작업을 호출하기 전에 사용자가 Managers라는 역할에 속하는지 확인합니다.

    Private Sub LoadRestrictedReports()
        Dim loadSales = context.Load(context.GetSalesOrderHeadersQuery().Take(numberOfRows))
        SalesOrdersGrid.ItemsSource = loadSales.Entities
        SalesOrdersGrid.Visibility = System.Windows.Visibility.Visible
    
        If (WebContext.Current.User.IsInRole("Managers")) Then
            Dim loadCustomers = context.Load(context.GetCustomersQuery().Take(numberOfRows))
            CustomersGrid.ItemsSource = loadCustomers.Entities
            CustomersGrid.Visibility = System.Windows.Visibility.Visible
        Else
            CustomersGrid.Visibility = System.Windows.Visibility.Collapsed
        End If
    End Sub
    
    private void LoadRestrictedReports()
    {
        LoadOperation<SalesOrderHeader> loadSales = context.Load(context.GetSalesOrderHeadersQuery().Take(numberOfRows));
        SalesOrdersGrid.ItemsSource = loadSales.Entities;
        SalesOrdersGrid.Visibility = System.Windows.Visibility.Visible;
    
        if (WebContext.Current.User.IsInRole("Managers"))
        {
            LoadOperation<Customer> loadCustomers = context.Load(context.GetCustomersQuery().Take(numberOfRows));
            CustomersGrid.ItemsSource = loadCustomers.Entities;
            CustomersGrid.Visibility = System.Windows.Visibility.Visible;
        }
        else
        {
            CustomersGrid.Visibility = System.Windows.Visibility.Collapsed;
        }
    }
    
  2. XAML에서 WebContext 개체를 사용할 수 있게 하려면 루트 visual을 만들기 전에 Application.Startup 이벤트의 응용 프로그램 리소스에 현재 WebContext 인스턴스를 추가합니다.

    다음 예제에서는 WebContext 인스턴스를 응용 프로그램 리소스로 추가하는 방법을 보여 줍니다.

    Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) Handles Me.Startup
        Me.Resources.Add("WebContext", WebContext.Current)
        Me.RootVisual = New MainPage()
    End Sub
    
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        this.Resources.Add("WebContext", WebContext.Current);
        this.RootVisual = new MainPage();
    }
    

참고 항목

작업

연습: Silverlight 탐색 응용 프로그램에서 인증 서비스 사용
연습: Silverlight 비즈니스 응용 프로그램에서 인증 서비스 사용