- У меня есть контейнер в CosmosDB , который содержит информацию о некоторых странах.
- У меня есть таблица Storage , которая содержит права доступа пользователей в определенных c странах.
IE пользователь testmail@test.com может получить доступ только к США, Великобритании странам.
В моей функции azure после успешной аутентификации я получил адрес электронной почты пользователя.
Я выполняю поиск в таблице хранения разрешений пользователей, чтобы получить доступ к указанным c странам пользователя.
Манипулируйте строкой запроса со строкой полученной страны пользователя, чтобы сделайте последний запрос.
Это правильный способ получения ресурсов из 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...