MCPcopy Create free account
hub / github.com/documentdb/documentdb / ParsePrivilegesArray

Function ParsePrivilegesArray

pg_documentdb/src/commands/roles.c:428–511  ·  view source on GitHub ↗

* ParsePrivilegesArray parses the privileges array from the createRole command. */

Source from the content-addressed store, hash-verified

426 * ParsePrivilegesArray parses the privileges array from the createRole command.
427 */
428static void
429ParsePrivilegesArray(bson_iter_t *privilegesIter, CreateRoleSpec *createRoleSpec)
430{
431 if (bson_iter_type(privilegesIter) != BSON_TYPE_ARRAY)
432 {
433 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
434 errmsg(
435 "'privileges' must be an array.")));
436 }
437
438 bson_iter_t privilegesArrayIter;
439 bson_iter_recurse(privilegesIter, &privilegesArrayIter);
440
441 while (bson_iter_next(&privilegesArrayIter))
442 {
443 if (bson_iter_type(&privilegesArrayIter) != BSON_TYPE_DOCUMENT)
444 {
445 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
446 errmsg(
447 "Each privilege entry must be a document.")));
448 }
449
450 bson_iter_t privilegeDocIter;
451 bson_iter_recurse(&privilegesArrayIter, &privilegeDocIter);
452
453 StringView dbName = { 0 };
454 StringView collectionName = { 0 };
455 HTAB *actions = NULL;
456 bool resourceFound = false;
457 bool actionsFound = false;
458
459 while (bson_iter_next(&privilegeDocIter))
460 {
461 const char *privilegeKey = bson_iter_key(&privilegeDocIter);
462
463 if (strcmp(privilegeKey, "resource") == 0)
464 {
465 resourceFound = true;
466 ParseResourceDocument(&privilegeDocIter, &dbName, &collectionName);
467 }
468 else if (strcmp(privilegeKey, "actions") == 0)
469 {
470 actionsFound = true;
471 actions = ParseActionsArray(&privilegeDocIter);
472 }
473 else
474 {
475 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
476 errmsg(
477 "The specified field '%s' is not supported in privilege.",
478 privilegeKey)));
479 }
480 }
481
482 if (!resourceFound)
483 {
484 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
485 errmsg(

Callers 1

ParseCreateRoleSpecFunction · 0.85

Calls 2

ParseResourceDocumentFunction · 0.85
ParseActionsArrayFunction · 0.85

Tested by

no test coverage detected