Azure Cosmos DB - доступ к различным данным для пользователя (SQL) - PullRequest
0 голосов
/ 27 января 2020

Я новичок в веб-разработке, поэтому вопрос может быть тривиальным.

У меня есть несколько физических устройств, которые будут передавать влажность (и другие вещи) на Azure Cosmos DB. Я хочу, чтобы пользователи могли только читать свои устройства (через график в веб-приложении). Все устройства заканчиваются одной коллекцией.

Я настроил систему в Azure следующим образом:

Устройство -> Azure IoT-Hub -> Azure функции -> Azure Cosmos DB.

Веб-приложение использует Azure B2 C, чтобы пользователи могли войти в систему, но как мне "назначить" устройство- Идентификатор пользователя? Я прочитал, что можно создавать токены доступа с указанным c доступом к определенным ключам разделов, но как мне сохранить информацию с разрешениями доступа для каждого пользователя? Нужна ли мне новая база данных для хранения только этой информации?

Вначале хорошо, если я должен предоставить разрешения вручную.

Общая информация:

  • Данные в Azure cosmos db используют идентификатор устройства в качестве ключа раздела.
  • У пользователей может быть несколько устройств.
  • Веб-приложение работает ASP . NET core (я новичок здесь).
  • Для доступа к веб-приложению требуется вход в систему.
  • Я пишу код в Visual Studio 2019 и использовал пример со встроенной авторизацией.

Спасибо за помощь.

ПРИМЕЧАНИЕ: это может быть слишком много, чтобы спросить, но общее объяснение вместе с примером кода было бы идеально для меня :)

ОБНОВЛЕНИЕ: Мне удалось получить электронную почту зарегистрированного у пользователя:

@using System.Security.Claims;  // for using ClaimsIdentity

// Get user information
var userEmailAddress = ((ClaimsIdentity)User.Identity).FindFirst("emails").Value;

Моя первоначальная идея - создать базу данных, содержащую: «Электронная почта» и «Доступные устройства». Я предполагаю, что это должна быть отдельная база данных, так как мне нужен параметр Time-To-Live в cosmos db.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Хорошо, я был занят другими проектами, но наконец-то вернулся к этой проблеме.

Так что, в основном, причина, по которой я хотел создать отдельную базу данных, заключалась в том, что мне нужен TTL на Azure Cosmos. -DB, и я не хочу, чтобы удалить пользовательские разрешения.

Оказывается, что можно отменить TTL базы данных по умолчанию, установив поле "ttl" в самом документе. Таким образом, можно исключить документы из списка удаленных.

Таким образом, основное решение c состоит в следующем: создайте документы с параметром "ttl", установленным в -1, чтобы исключить их удаление. Тогда этот документ может содержать информацию о том, какие пользователи имеют к чему доступ.

0 голосов
/ 27 января 2020

Вы можете достичь того, что ищете, используя Resource Tokens .

Как и в этом примере из документации, вы можете назначать разрешения по ключу раздела:

//Create a user.
Database database = benchmark.client.GetDatabase("SalesDatabase");

User user = await database.CreateUserAsync("User 1");

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders",
        permissionMode: PermissionMode.All,
        container: benchmark.container,
        resourcePartitionKey: new PartitionKey("012345")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...