Ověřování uživatelů pomocí Azure Cosmos DB databáze dokumentů :::no-loc(Xamarin.Forms):::Authenticate Users with an Azure Cosmos DB Document Database and :::no-loc(Xamarin.Forms):::

Stažení ukázky stažení ukázkyDownload Sample Download the sample

Azure Cosmos DB databáze dokumentů podporují dělené kolekce, které můžou zahrnovat víc serverů a oddílů a současně podporují neomezené úložiště a propustnost. Tento článek vysvětluje, jak zkombinovat řízení přístupu pomocí dělených kolekcí, aby uživatel mohl přistupovat jenom k vlastním dokumentům v :::no-loc(Xamarin.Forms)::: aplikaci.Azure Cosmos DB document databases support partitioned collections, which can span multiple servers and partitions, while supporting unlimited storage and throughput. This article explains how to combine access control with partitioned collections, so that a user can only access their own documents in a :::no-loc(Xamarin.Forms)::: application.

PřehledOverview

Při vytváření dělené kolekce se musí zadat klíč oddílu a dokumenty se stejným klíčem oddílu se uloží do stejného oddílu.A partition key must be specified when creating a partitioned collection, and documents with the same partition key will be stored in the same partition. Proto zadáním identity uživatele jako klíče oddílu navedete do dělené kolekce, která bude ukládat pouze dokumenty pro tohoto uživatele.Therefore, specifying the user's identity as a partition key will result in a partitioned collection that will only store documents for that user. Tím se také zajistí, že se databáze dokumentu Azure Cosmos DB škáluje podle počtu uživatelů a položek.This also ensures that the Azure Cosmos DB document database will scale as the number of users and items increase.

Přístup se musí udělit libovolné kolekci a model řízení přístupu rozhraní API SQL definuje dva typy konstruktorů přístupu:Access must be granted to any collection, and the SQL API access control model defines two types of access constructs:

  • Hlavní klíče umožňují úplný přístup správce ke všem prostředkům v rámci účtu Cosmos DB a vytvoří se při vytvoření Cosmos DB účtu.Master keys enable full administrative access to all resources within a Cosmos DB account, and are created when a Cosmos DB account is created.
  • Tokeny prostředků zaznamenávají vztah mezi uživatelem databáze a oprávnění, které má uživatel pro určitý Cosmos DB prostředek, jako je například kolekce nebo dokument.Resource tokens capture the relationship between the user of a database and the permission the user has for a specific Cosmos DB resource, such as a collection or a document.

Vystavení hlavního klíče otevře Cosmos DB účet pro možnost škodlivého nebo nedbalostho použití.Exposing a master key opens a Cosmos DB account to the possibility of malicious or negligent use. Azure Cosmos DB tokeny prostředků ale poskytují bezpečný mechanismus, který klientům umožňuje číst, zapisovat a odstraňovat konkrétní prostředky v účtu Azure Cosmos DB v závislosti na udělených oprávněních.However, Azure Cosmos DB resource tokens provide a safe mechanism for allowing clients to read, write, and delete specific resources in an Azure Cosmos DB account according to the granted permissions.

Typický přístup k vyžádání, generování a doručování tokenů prostředků do mobilní aplikace je použití zprostředkovatele tokenů prostředků.A typical approach to requesting, generating, and delivering resource tokens to a mobile application is to use a resource token broker. Následující diagram znázorňuje základní přehled o tom, jak ukázková aplikace používá zprostředkovatele tokenů prostředků ke správě přístupu k datům databáze dokumentů:The following diagram shows a high-level overview of how the sample application uses a resource token broker to manage access to the document database data:

Proces ověřování databáze dokumentů

Zprostředkovatel tokenů prostředků je služba webového rozhraní API střední vrstvy, která je hostovaná v Azure App Service, která má hlavní klíč Cosmos DB účtu.The resource token broker is a mid-tier Web API service, hosted in Azure App Service, which possesses the master key of the Cosmos DB account. Ukázková aplikace používá zprostředkovatele tokenů prostředků ke správě přístupu k datům databáze dokumentů následujícím způsobem:The sample application uses the resource token broker to manage access to the document database data as follows:

  1. Při přihlášení :::no-loc(Xamarin.Forms)::: aplikace kontaktuje Azure App Service k zahájení toku ověřování.On login, the :::no-loc(Xamarin.Forms)::: application contacts Azure App Service to initiate an authentication flow.
  2. Azure App Service provádí tok ověřování OAuth pomocí Facebooku.Azure App Service performs an OAuth authentication flow with Facebook. Po dokončení toku ověřování :::no-loc(Xamarin.Forms)::: obdrží aplikace přístupový token.After the authentication flow completes, the :::no-loc(Xamarin.Forms)::: application receives an access token.
  3. :::no-loc(Xamarin.Forms):::Aplikace používá přístupový token k vyžádání tokenu prostředku od zprostředkovatele tokenů prostředků.The :::no-loc(Xamarin.Forms)::: application uses the access token to request a resource token from the resource token broker.
  4. Zprostředkovatel tokenů prostředků používá přístupový token k vyžádání identity uživatele z Facebooku.The resource token broker uses the access token to request the user's identity from Facebook. Identita uživatele se pak použije k vyžádání tokenu prostředku z Cosmos DB, který slouží k udělení přístupu pro čtení a zápis do dělené kolekce ověřeného uživatele.The user's identity is then used to request a resource token from Cosmos DB, which is used to grant read/write access to the authenticated user's partitioned collection.
  5. :::no-loc(Xamarin.Forms):::Aplikace používá token prostředku k přímému přístupu k prostředkům Cosmos DB s oprávněními definovanými tokenem prostředku.The :::no-loc(Xamarin.Forms)::: application uses the resource token to directly access Cosmos DB resources with the permissions defined by the resource token.

Poznámka

Po vypršení platnosti tokenu prostředku obdrží další žádosti o databázi dokumentů 401 neoprávněnou výjimku.When the resource token expires, subsequent document database requests will receive a 401 unauthorized exception. V tuto chvíli :::no-loc(Xamarin.Forms)::: by aplikace měla znovu vytvořit identitu a požádat o nový token prostředku.At this point, :::no-loc(Xamarin.Forms)::: applications should re-establish the identity and request a new resource token.

Další informace o dělení Cosmos DB najdete v tématu dělení a škálování v Azure Cosmos DB.For more information about Cosmos DB partitioning, see How to partition and scale in Azure Cosmos DB. Další informace o Cosmos DB řízení přístupu najdete v tématu zabezpečení přístupu k Cosmos DB dat a řízení přístupu v rozhraní SQL API.For more information about Cosmos DB access control, see Securing access to Cosmos DB data and Access control in the SQL API.

NastaveníSetup

Postup pro integraci zprostředkovatele tokenů prostředků do :::no-loc(Xamarin.Forms)::: aplikace je následující:The process for integrating the resource token broker into a :::no-loc(Xamarin.Forms)::: application is as follows:

  1. Vytvořte účet Cosmos DB, který bude používat řízení přístupu.Create a Cosmos DB account that will use access control. Další informace najdete v tématu konfigurace Azure Cosmos DB.For more information, see Azure Cosmos DB Configuration.
  2. Vytvořte Azure App Service pro hostování zprostředkovatele tokenů prostředků.Create an Azure App Service to host the resource token broker. Další informace najdete v tématu konfigurace Azure App Service.For more information, see Azure App Service Configuration.
  3. Vytvořte aplikaci Facebook, která provede ověření.Create a Facebook app to perform authentication. Další informace najdete v tématu Konfigurace aplikace na Facebooku.For more information, see Facebook App Configuration.
  4. Nakonfigurujte Azure App Service, aby prováděla jednoduché ověřování pomocí Facebooku.Configure the Azure App Service to perform easy authentication with Facebook. Další informace najdete v tématu Konfigurace ověřování Azure App Service.For more information, see Azure App Service Authentication Configuration.
  5. Nakonfigurujte :::no-loc(Xamarin.Forms)::: ukázkovou aplikaci pro komunikaci s Azure App Service a Cosmos DB.Configure the :::no-loc(Xamarin.Forms)::: sample application to communicate with Azure App Service and Cosmos DB. Další informace najdete v tématu :::no-loc(Xamarin.Forms)::: Konfigurace aplikace.For more information, see :::no-loc(Xamarin.Forms)::: Application Configuration.

Poznámka

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.If you don't have an Azure subscription, create a free account before you begin.

Konfigurace Azure Cosmos DBAzure Cosmos DB Configuration

Postup vytvoření účtu Cosmos DB, který bude používat řízení přístupu, je následující:The process for creating a Cosmos DB account that will use access control is as follows:

  1. Vytvořte účet Cosmos DB.Create a Cosmos DB account. Další informace najdete v tématu Vytvoření účtu Azure Cosmos DB.For more information, see Create an Azure Cosmos DB account.
  2. V Cosmos DB účtu vytvořte novou kolekci s názvem UserItems a zadáním klíče oddílu /userid .In the Cosmos DB account, create a new collection named UserItems, specifying a partition key of /userid.

Konfigurace Azure App ServiceAzure App Service Configuration

Proces hostování zprostředkovatele tokenů prostředků v Azure App Service je následující:The process for hosting the resource token broker in Azure App Service is as follows:

  1. V Azure Portal vytvořte novou webovou aplikaci App Service.In the Azure portal, create a new App Service web app. Další informace najdete v tématu Vytvoření webové aplikace v App Service Environment.For more information, see Create a web app in an App Service Environment.

  2. V Azure Portal otevřete okno nastavení aplikace pro webovou aplikaci a přidejte následující nastavení:In the Azure portal, open the App Settings blade for the web app, and add the following settings:

    • accountUrl – hodnota by měla být Cosmos DB adresa URL účtu z okna klíče účtu Cosmos DB.accountUrl – the value should be the Cosmos DB account URL from the Keys blade of the Cosmos DB account.
    • accountKey – hodnota by měla být hlavní klíč Cosmos DB (primární nebo sekundární) z okna klíče účtu Cosmos DB.accountKey – the value should be the Cosmos DB master key (primary or secondary) from the Keys blade of the Cosmos DB account.
    • databaseId – hodnota by měla být název databáze Cosmos DB.databaseId – the value should be the name of the Cosmos DB database.
    • collectionId – hodnota by měla být název kolekce Cosmos DB (v tomto případě UserItems ).collectionId – the value should be the name of the Cosmos DB collection (in this case, UserItems).
    • hostUrl – hodnota by měla být adresa URL webové aplikace z okna Přehled účtu App Service.hostUrl – the value should be the URL of the web app from the Overview blade of the App Service account.

    Tato konfigurace znázorňuje následující snímek obrazovky:The following screenshot demonstrates this configuration:

    App Service nastavení webové aplikaceApp Service Web App Settings

  3. Publikujte řešení zprostředkovatele tokenů prostředků do webové aplikace Azure App Service.Publish the resource token broker solution to the Azure App Service web app.

Konfigurace aplikace pro FacebookFacebook App Configuration

Postup vytvoření aplikace Facebook k provedení ověřování je následující:The process for creating a Facebook app to perform authentication is as follows:

  1. Vytvořte aplikaci Facebook.Create a Facebook app. Další informace najdete v tématu registrace a konfigurace aplikace v centru pro vývojáře na Facebooku.For more information, see Register and Configure an App on the Facebook Developer Center.
  2. Přidejte do aplikace přihlašovací produkt Facebooku.Add the Facebook Login product to the app. Další informace najdete v tématu Přidání přihlašovacího jména na Facebooku do vaší aplikace nebo webu v centru pro vývojáře na Facebooku.For more information, see Add Facebook Login to Your App or Website on the Facebook Developer Center.
  3. Následujícím způsobem nakonfigurujte přihlašovací jméno Facebooku:Configure Facebook Login as follows:
    • Povolte přihlašovací jméno klienta OAuth.Enable Client OAuth Login.
    • Povolte přihlašovací údaje webového OAuth.Enable Web OAuth Login.
    • Nastavte platný identifikátor URI přesměrování OAuth na identifikátor URI webové aplikace App Service s /.auth/login/facebook/callback připojením.Set the Valid OAuth redirect URI to the URI of the App Service web app, with /.auth/login/facebook/callback appended.

Tato konfigurace znázorňuje následující snímek obrazovky:The following screenshot demonstrates this configuration:

Nastavení OAuth pro přihlášení k Facebooku

Další informace najdete v tématu Registrace aplikace pomocí Facebooku.For more information, see Register your application with Facebook.

Konfigurace ověřování Azure App ServiceAzure App Service Authentication Configuration

Proces konfigurace App Service jednoduchého ověřování je následující:The process for configuring App Service easy authentication is as follows:

  1. Na webu Azure Portal přejděte do webové aplikace App Service.In the Azure Portal, navigate to the App Service web app.

  2. Na webu Azure Portal otevřete okno ověřování/autorizace a proveďte následující konfiguraci:In the Azure Portal, open the Authentication / Authorization blade and perform the following configuration:

    • Mělo by být zapnuté ověřování App Service.App Service Authentication should be turned on.
    • Akce, která se má provést v případě, že žádost není ověřená, by měla být nastavená na přihlášení pomocí Facebooku.The action to take when a request is not authenticated should be set to Login in with Facebook.

    Tato konfigurace znázorňuje následující snímek obrazovky:The following screenshot demonstrates this configuration:

    App Service nastavení ověřování webové aplikaceApp Service Web App Authentication Settings

Aby bylo možné povolit tok ověřování, měla by být taky nakonfigurovaná webová aplikace App Service, aby komunikovala s aplikací Facebook.The App Service web app should also be configured to communicate with the Facebook app to enable the authentication flow. To se dá udělat tak, že vyberete poskytovatele identity Facebooku a zadáte ID aplikace a tajné hodnoty z aplikace na Facebooku v centru pro vývojáře pro Facebook.This can be accomplished by selecting the Facebook identity provider, and entering the App ID and App Secret values from the Facebook app settings on the Facebook Developer Center. Další informace najdete v tématu Přidání informací o Facebooku do aplikace.For more information, see Add Facebook information to your application.

:::no-loc(Xamarin.Forms)::: Konfigurace aplikace:::no-loc(Xamarin.Forms)::: Application Configuration

Postup pro konfiguraci :::no-loc(Xamarin.Forms)::: ukázkové aplikace je následující:The process for configuring the :::no-loc(Xamarin.Forms)::: sample application is as follows:

  1. Otevřete :::no-loc(Xamarin.Forms)::: řešení.Open the :::no-loc(Xamarin.Forms)::: solution.
  2. Otevřete Constants.cs a aktualizujte hodnoty následujících konstant:Open Constants.cs and update the values of the following constants:
    • EndpointUri – hodnota by měla být Cosmos DB adresa URL účtu z okna klíče účtu Cosmos DB.EndpointUri – the value should be the Cosmos DB account URL from the Keys blade of the Cosmos DB account.
    • DatabaseName – hodnota by měla být název databáze dokumentů.DatabaseName – the value should be the name of the document database.
    • CollectionName – hodnota by měla být název kolekce databáze dokumentů (v tomto případě UserItems ).CollectionName – the value should be the name of the document database collection (in this case, UserItems).
    • ResourceTokenBrokerUrl – hodnota by měla být adresa URL webové aplikace zprostředkovatele tokenů prostředků v okně Přehled účtu App Service.ResourceTokenBrokerUrl – the value should be the URL of the resource token broker web app from the Overview blade of the App Service account.

Zahajuje se přihlášeníInitiating Login

Ukázková aplikace zahájí proces přihlášení přesměrováním prohlížeče na adresu URL zprostředkovatele identity, jak je znázorněno v následujícím příkladu kódu:The sample application initiates the login process by redirecting a browser to an identity provider URL, as demonstrated in the following example code:

var auth = new Xamarin.Auth.WebRedirectAuthenticator(
  new Uri(Constants.ResourceTokenBrokerUrl + "/.auth/login/facebook"),
  new Uri(Constants.ResourceTokenBrokerUrl + "/.auth/login/done"));

Tím dojde k zahájení toku ověřování OAuth mezi Azure App Service a Facebookem, které zobrazuje přihlašovací stránku Facebooku:This causes an OAuth authentication flow to be initiated between Azure App Service and Facebook, which displays the Facebook login page:

Facebook – přihlášení

Přihlášení můžete zrušit stisknutím tlačítka Zrušit v iOS nebo stisknutím tlačítka zpět na Androidu. v takovém případě uživatel zůstane neověřený a uživatelské rozhraní poskytovatele identity se odebere z obrazovky.The login can be cancelled by pressing the Cancel button on iOS or by pressing the Back button on Android, in which case the user remains unauthenticated and the identity provider user interface is removed from the screen.

Získání tokenu prostředkuObtaining a Resource Token

Po úspěšném ověření se WebRedirectAuthenticator.Completed událost aktivuje.Following successful authentication, the WebRedirectAuthenticator.Completed event fires. Následující příklad kódu ukazuje zpracování této události:The following code example demonstrates handling this event:

auth.Completed += async (sender, e) =>
{
  if (e.IsAuthenticated && e.Account.Properties.ContainsKey("token"))
  {
    var easyAuthResponseJson = JsonConvert.DeserializeObject<JObject>(e.Account.Properties["token"]);
    var easyAuthToken = easyAuthResponseJson.GetValue("authenticationToken").ToString();

    // Call the ResourceBroker to get the resource token
    using (var httpClient = new HttpClient())
    {
      httpClient.DefaultRequestHeaders.Add("x-zumo-auth", easyAuthToken);
      var response = await httpClient.GetAsync(Constants.ResourceTokenBrokerUrl + "/api/resourcetoken/");
      var jsonString = await response.Content.ReadAsStringAsync();
      var tokenJson = JsonConvert.DeserializeObject<JObject>(jsonString);
      resourceToken = tokenJson.GetValue("token").ToString();
      UserId = tokenJson.GetValue("userid").ToString();

      if (!string.IsNullOrWhiteSpace(resourceToken))
      {
        client = new DocumentClient(new Uri(Constants.EndpointUri), resourceToken);
        ...
      }
      ...
    }
  }
};

Výsledkem úspěšného ověření je přístupový token, který je k dispozici AuthenticatorCompletedEventArgs.Account vlastnost.The result of a successful authentication is an access token, which is available AuthenticatorCompletedEventArgs.Account property. Přístupový token se extrahuje a použije v požadavku GET na rozhraní API zprostředkovatele tokenu prostředku resourcetoken .The access token is extracted and used in a GET request to the resource token broker's resourcetoken API.

resourcetokenRozhraní API používá přístupový token k vyžádání identity uživatele z Facebooku, který se zase používá k vyžádání tokenu prostředku z Cosmos DB.The resourcetoken API uses the access token to request the user's identity from Facebook, which in turn is used to request a resource token from Cosmos DB. Pokud pro uživatele v databázi dokumentů již existuje platný dokument oprávnění, je načten a dokument JSON obsahující token prostředku je vrácen do :::no-loc(Xamarin.Forms)::: aplikace.If a valid permission document already exists for the user in the document database, it's retrieved and a JSON document containing the resource token is returned to the :::no-loc(Xamarin.Forms)::: application. Pokud pro uživatele neexistuje platný dokument oprávnění, vytvoří se uživatel a oprávnění v databázi dokumentů a token prostředku se extrahuje z dokumentu oprávnění a vrátí se do :::no-loc(Xamarin.Forms)::: aplikace v dokumentu JSON.If a valid permission document doesn't exist for the user, a user and permission is created in the document database, and the resource token is extracted from the permission document and returned to the :::no-loc(Xamarin.Forms)::: application in a JSON document.

Poznámka

Uživatel dokumentu databáze je prostředek přidružený k databázi dokumentů a každá databáze může obsahovat nula nebo více uživatelů.A document database user is a resource associated with a document database, and each database may contain zero or more users. Oprávnění databáze dokumentů je prostředek přidružený k uživateli databáze dokumentu a každý uživatel může obsahovat nula nebo více oprávnění.A document database permission is a resource associated with a document database user, and each user may contain zero or more permissions. Prostředek oprávnění poskytuje přístup k tokenu zabezpečení, který uživatel požaduje při pokusu o přístup k prostředku, jako je například dokument.A permission resource provides access to a security token that the user requires when attempting to access a resource such as a document.

Pokud se resourcetoken rozhraní API úspěšně dokončí, pošle se v odpovědi stavový kód HTTP 200 (ok) spolu s dokumentem JSON, který obsahuje token prostředku.If the resourcetoken API successfully completes, it will send HTTP status code 200 (OK) in the response, along with a JSON document containing the resource token. Následující data JSON zobrazují typickou zprávu o úspěšné odpovědi:The following JSON data shows a typical successful response message:

{
  "id": "John Smithpermission",
  "token": "type=resource&ver=1&sig=zx6k2zzxqktzvuzuku4b7y==;a74aukk99qtwk8v5rxfrfz7ay7zzqfkbfkremrwtaapvavw2mrvia4umbi/7iiwkrrq+buqqrzkaq4pp15y6bki1u//zf7p9x/aefbvqvq3tjjqiffurfx+vexa1xarxkkv9rbua9ypfzr47xpp5vmxuvzbekkwq6txme0xxxbjhzaxbkvzaji+iru3xqjp05amvq1r1q2k+qrarurhmjzah/ha0evixazkve2xk1zu9u/jpyf1xrwbkxqpzebvqwma+hyyaazemr6qx9uz9be==;",
  "expires": 4035948,
  "userid": "John Smith"
}

WebRedirectAuthenticator.CompletedObslužná rutina události přečte odpověď z resourcetoken rozhraní API a extrahuje token prostředku a ID uživatele. Token prostředku se pak předává jako argument DocumentClient konstruktoru, který zapouzdřuje koncový bod, přihlašovací údaje a zásady připojení používané pro přístup k Cosmos DB a slouží ke konfiguraci a provádění požadavků na Cosmos DB.The WebRedirectAuthenticator.Completed event handler reads the response from the resourcetoken API and extracts the resource token and the user id. The resource token is then passed as an argument to the DocumentClient constructor, which encapsulates the endpoint, credentials, and connection policy used to access Cosmos DB, and is used to configure and execute requests against Cosmos DB. Token prostředku se posílá spolu s každou žádostí, aby měl přímý přístup k prostředku, a označuje, že je udělený přístup pro čtení a zápis do kolekce s oddíly ověřených uživatelů.The resource token is sent with each request to directly access a resource, and indicates that read/write access to the authenticated users' partitioned collection is granted.

Načítání dokumentůRetrieving Documents

Načítání dokumentů, které patří pouze k ověřenému uživateli, lze dosáhnout vytvořením dotazu dokumentu, který obsahuje ID uživatele jako klíč oddílu a je znázorněn v následujícím příkladu kódu:Retrieving documents that only belong to the authenticated user can be achieved by creating a document query that includes the user's id as a partition key, and is demonstrated in the following code example:

var query = client.CreateDocumentQuery<TodoItem>(collectionLink,
                        new FeedOptions
                        {
                          MaxItemCount = -1,
                          PartitionKey = new PartitionKey(UserId)
                        })
          .Where(item => !item.Id.Contains("permission"))
          .AsDocumentQuery();
while (query.HasMoreResults)
{
  Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
}

Dotaz asynchronně načte všechny dokumenty patřící k ověřenému uživateli ze zadané kolekce a umístí je do List<TodoItem> kolekce k zobrazení.The query asynchronously retrieves all the documents belonging to the authenticated user, from the specified collection, and places them in a List<TodoItem> collection for display.

CreateDocumentQuery<T>Metoda Určuje Uri argument reprezentující kolekci, která má být dotazována na dokumenty, a FeedOptions objekt.The CreateDocumentQuery<T> method specifies a Uri argument that represents the collection that should be queried for documents, and a FeedOptions object. FeedOptionsObjekt určuje, že dotaz může vrátit neomezený počet položek a ID uživatele jako klíč oddílu.The FeedOptions object specifies that an unlimited number of items can be returned by the query, and the user's id as a partition key. Tím se zajistí, že se ve výsledku vrátí jenom dokumenty v dělené kolekci uživatele.This ensures that only documents in the user's partitioned collection are returned in the result.

Poznámka

Všimněte si, že dokumenty oprávnění, které vytváří zprostředkovatel tokenů prostředků, jsou uloženy ve stejné kolekci dokumentů jako dokumenty vytvořené :::no-loc(Xamarin.Forms)::: aplikací.Note that permission documents, which are created by the resource token broker, are stored in the same document collection as the documents created by the :::no-loc(Xamarin.Forms)::: application. Proto dotaz na dokument obsahuje Where klauzuli, která aplikuje predikát filtrování na dotaz na kolekci dokumentů.Therefore, the document query contains a Where clause that applies a filtering predicate to the query against the document collection. Tato klauzule zajišťuje, že dokumenty oprávnění nejsou vráceny z kolekce dokumentů.This clause ensures that permission documents aren't returned from the document collection.

Další informace o načítání dokumentů z kolekce dokumentů najdete v tématu načítání dokumentů kolekce dokumentů.For more information about retrieving documents from a document collection, see Retrieving Document Collection Documents.

Vkládání dokumentůInserting Documents

Před vložením dokumentu do kolekce dokumentů TodoItem.UserId by měla být vlastnost aktualizována hodnotou použitou jako klíč oddílu, jak je znázorněno v následujícím příkladu kódu:Prior to inserting a document into a document collection, the TodoItem.UserId property should be updated with the value being used as the partition key, as demonstrated in the following code example:

item.UserId = UserId;
await client.CreateDocumentAsync(collectionLink, item);

Tím se zajistí, že se dokument vloží do dělené kolekce uživatele.This ensures that the document will be inserted into the user's partitioned collection.

Další informace o vložení dokumentu do kolekce dokumentů naleznete v tématu Vložení dokumentu do kolekce dokumentů.For more information about inserting a document into a document collection, see Inserting a Document into a Document Collection.

Odstraňování dokumentůDeleting Documents

Hodnota klíče oddílu musí být zadána při odstraňování dokumentu z dělené kolekce, jak je znázorněno v následujícím příkladu kódu:The partition key value must be specified when deleting a document from a partitioned collection, as demonstrated in the following code example:

await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, id),
                 new RequestOptions
                 {
                   PartitionKey = new PartitionKey(UserId)
                 });

Tím je zajištěno, že Cosmos DB ví, ze které dělené kolekce se má dokument odstranit.This ensures that Cosmos DB knows which partitioned collection to delete the document from.

Další informace o odstranění dokumentu z kolekce dokumentů naleznete v tématu odstranění dokumentu z kolekce dokumentů.For more information about deleting a document from a document collection, see Deleting a Document from a Document Collection.

ShrnutíSummary

Tento článek vysvětluje, jak zkombinovat řízení přístupu pomocí dělených kolekcí, aby uživatel měl přístup k dokumentům dokumentů databáze jenom v :::no-loc(Xamarin.Forms)::: aplikaci.This article explained how to combine access control with partitioned collections, so that a user can only access their own document database documents in a :::no-loc(Xamarin.Forms)::: application. Zadáním identity uživatele jako klíče oddílu zajistíte, aby dělená kolekce mohla ukládat pouze dokumenty pro tohoto uživatele.Specifying the user's identity as a partition key ensures that a partitioned collection can only store documents for that user.