Есть ли способ получить данные на основе разрешений, назначенных пользователем в Cosmos DB? - PullRequest
0 голосов
/ 25 мая 2020
  • У меня есть контейнер в CosmosDB , который содержит информацию о некоторых странах.
  • У меня есть таблица Storage , которая содержит права доступа пользователей в определенных c странах.

IE пользователь testmail@test.com может получить доступ только к США, Великобритании странам.

  1. В моей функции azure после успешной аутентификации я получил адрес электронной почты пользователя.

  2. Я выполняю поиск в таблице хранения разрешений пользователей, чтобы получить доступ к указанным c странам пользователя.

  3. Манипулируйте строкой запроса со строкой полученной страны пользователя, чтобы сделайте последний запрос.

Это правильный способ получения ресурсов из CosmosDB на основе разрешений, назначенных пользователем?

Если это не так:

Как назначить пользовательские разрешения для azure активного каталога для получения данных на основе этих разрешений?

Работает приведенный ниже код.

Вот тело функции:

//**GET THE USER INFO**
var user = req.Authenticate();

//**GET THE USER PERMISSIONS**
var userPermissions = await new CalculateUserPermissions().GetPermissions(user.UserId);

//**GET THE USER COUNTRIES ['USA', 'UK']**
List<string> countries = userPermissions.Countries;

StringBuilder query = new StringBuilder(@"
    SELECT 
     c.country,
     c.code,
     c.info,
    FROM c");

if (countries == null)
{
   query.Append($" GROUP BY c.country, c.code) as root");
}
else
{
   query.Append($" WHERE");

   foreach (string country in countries)
   {
      query.Append($" c.code = '{country}' OR");
   }

   string builtQuery = query.ToString();

   // TRIM THE LAST 'OR'
   builtQuery = builtQuery.Substring(0, builtQuery.Length - 3);

   query = new StringBuilder(builtQuery);
      query.Append($" GROUP BY c.country, c.code");
   }
}

...call the database with the query string...

1 Ответ

0 голосов
/ 25 мая 2020

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

Если количество стран не слишком велико, я думаю, было бы проще просто создать контейнер пользователей и встроить коды стран в виде массива в него. каждому пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...