UNPKG

@aws-cdk/aws-redshift-alpha

Version:

The CDK Construct Library for AWS::Redshift

116 lines 14.1 kB
"use strict"; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserTablePrivileges = void 0; const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal"); const constructs_1 = require("constructs"); const table_1 = require("../table"); const database_query_1 = require("./database-query"); const handler_name_1 = require("./database-query-provider/handler-name"); /** * Privileges granted to a Redshift user on Redshift tables. * * This construct is located in the `private` directory to ensure that it is not exported for direct public use. This * means that user privileges must be managed through the `Table.grant` method or the `User.addTablePrivileges` * method. Thus, each `User` will have at most one `UserTablePrivileges` construct to manage its privileges. For details * on why this is a Good Thing, see the README, under "Granting Privileges". */ let UserTablePrivileges = (() => { let _classDecorators = [helpers_internal_1.noBoxStackTraces]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = constructs_1.Construct; var UserTablePrivileges = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); UserTablePrivileges = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); } privileges; constructor(scope, id, props) { super(scope, id); this.privileges = helpers_internal_1.Box.fromArray(props.privileges ?? [], { omitEmpty: false }); new database_query_1.DatabaseQuery(this, 'Resource', { ...props, handler: handler_name_1.HandlerName.UserTablePrivileges, properties: { username: props.user.username, tablePrivileges: this.privileges.derive(privs => Object.entries(groupPrivilegesByTable(privs)) .map(([tableId, tablePrivileges]) => ({ tableId, // The first element always exists since the groupBy element is at least a singleton. tableName: tablePrivileges[0].table.tableName, actions: unifyTableActions(tablePrivileges).map(action => table_1.TableAction[action]), }))), }, }); } /** * Grant this user additional privileges. */ addPrivileges(table, ...actions) { this.privileges.push({ table, actions }); } }; return UserTablePrivileges = _classThis; })(); exports.UserTablePrivileges = UserTablePrivileges; const unifyTableActions = (tablePrivileges) => { const set = new Set(tablePrivileges.flatMap(x => x.actions)); if (set.has(table_1.TableAction.ALL)) { return [table_1.TableAction.ALL]; } if (set.has(table_1.TableAction.UPDATE) || set.has(table_1.TableAction.DELETE)) { set.add(table_1.TableAction.SELECT); } return [...set]; }; const groupPrivilegesByTable = (privileges) => { return privileges.reduce((grouped, privilege) => { const { table } = privilege; const tableId = table.node.id; const tablePrivileges = grouped[tableId] ?? []; return { ...grouped, [tableId]: [...tablePrivileges, privilege], }; }, {}); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmlsZWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByaXZpbGVnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDRFQUE4RTtBQUM5RSwyQ0FBdUM7QUFHdkMsb0NBQXVDO0FBRXZDLHFEQUFpRDtBQUNqRCx5RUFBcUU7QUFtQ3JFOzs7Ozs7O0dBT0c7SUFFVSxtQkFBbUI7NEJBRC9CLG1DQUFnQjs7OztzQkFDd0Isc0JBQVM7bUNBQWpCLFNBQVEsV0FBUzs7OztZQUFsRCw2S0FnQ0M7OztZQWhDWSx1REFBbUI7O1FBQ3RCLFVBQVUsQ0FBNEI7UUFFOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtZQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWpCLElBQUksQ0FBQyxVQUFVLEdBQUcsc0JBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUU5RSxJQUFJLDhCQUFhLENBQWtDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ25FLEdBQUcsS0FBSztnQkFDUixPQUFPLEVBQUUsMEJBQVcsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFVBQVUsRUFBRTtvQkFDVixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRO29CQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3BDLE9BQU87d0JBQ1AscUZBQXFGO3dCQUNyRixTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBRSxDQUFDLEtBQUssQ0FBQyxTQUFTO3dCQUM5QyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDL0UsQ0FBQyxDQUFDLENBQ0M7aUJBQ1Q7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVEOztXQUVHO1FBQ0gsYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFHLE9BQXNCO1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDMUM7Ozs7QUEvQlUsa0RBQW1CO0FBa0NoQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsZUFBaUMsRUFBaUIsRUFBRTtJQUM3RSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBYyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFMUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsbUJBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFXLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDL0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBcUMsRUFBb0MsRUFBRTtJQUN6RyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsU0FBUyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBc0MsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUFycmF5Qm94IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBCb3gsIG5vQm94U3RhY2tUcmFjZXMgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZU9wdGlvbnMgfSBmcm9tICcuLi9kYXRhYmFzZS1vcHRpb25zJztcbmltcG9ydCB0eXBlIHsgSVRhYmxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgVGFibGVBY3Rpb24gfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgdHlwZSB7IElVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgeyBEYXRhYmFzZVF1ZXJ5IH0gZnJvbSAnLi9kYXRhYmFzZS1xdWVyeSc7XG5pbXBvcnQgeyBIYW5kbGVyTmFtZSB9IGZyb20gJy4vZGF0YWJhc2UtcXVlcnktcHJvdmlkZXIvaGFuZGxlci1uYW1lJztcbmltcG9ydCB0eXBlIHsgVXNlclRhYmxlUHJpdmlsZWdlc0hhbmRsZXJQcm9wcyB9IGZyb20gJy4vaGFuZGxlci1wcm9wcyc7XG5cbi8qKlxuICogVGhlIFJlZHNoaWZ0IHRhYmxlIGFuZCBhY3Rpb24gdGhhdCBtYWtlIHVwIGEgcHJpdmlsZWdlIHRoYXQgY2FuIGJlIGdyYW50ZWQgdG8gYSBSZWRzaGlmdCB1c2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJpdmlsZWdlIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSBvbiB3aGljaCBwcml2aWxlZ2VzIHdpbGwgYmUgZ3JhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb25zIHRoYXQgd2lsbCBiZSBncmFudGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uczogVGFibGVBY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzcGVjaWZ5aW5nIHByaXZpbGVnZXMgZ3JhbnRlZCB0byBhIFJlZHNoaWZ0IHVzZXIgb24gUmVkc2hpZnQgdGFibGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUYWJsZVByaXZpbGVnZXNQcm9wcyBleHRlbmRzIERhdGFiYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdXNlciB0byB3aGljaCBwcml2aWxlZ2VzIHdpbGwgYmUgZ3JhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXI6IElVc2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmlsZWdlcyB0byBiZSBncmFudGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXSAtIHVzZSBgYWRkUHJpdmlsZWdlc2AgdG8gZ3JhbnQgcHJpdmlsZWdlcyBhZnRlciBjb25zdHJ1Y3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZXM/OiBUYWJsZVByaXZpbGVnZVtdO1xufVxuXG4vKipcbiAqIFByaXZpbGVnZXMgZ3JhbnRlZCB0byBhIFJlZHNoaWZ0IHVzZXIgb24gUmVkc2hpZnQgdGFibGVzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGlzIGxvY2F0ZWQgaW4gdGhlIGBwcml2YXRlYCBkaXJlY3RvcnkgdG8gZW5zdXJlIHRoYXQgaXQgaXMgbm90IGV4cG9ydGVkIGZvciBkaXJlY3QgcHVibGljIHVzZS4gVGhpc1xuICogbWVhbnMgdGhhdCB1c2VyIHByaXZpbGVnZXMgbXVzdCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIGBUYWJsZS5ncmFudGAgbWV0aG9kIG9yIHRoZSBgVXNlci5hZGRUYWJsZVByaXZpbGVnZXNgXG4gKiBtZXRob2QuIFRodXMsIGVhY2ggYFVzZXJgIHdpbGwgaGF2ZSBhdCBtb3N0IG9uZSBgVXNlclRhYmxlUHJpdmlsZWdlc2AgY29uc3RydWN0IHRvIG1hbmFnZSBpdHMgcHJpdmlsZWdlcy4gRm9yIGRldGFpbHNcbiAqIG9uIHdoeSB0aGlzIGlzIGEgR29vZCBUaGluZywgc2VlIHRoZSBSRUFETUUsIHVuZGVyIFwiR3JhbnRpbmcgUHJpdmlsZWdlc1wiLlxuICovXG5Abm9Cb3hTdGFja1RyYWNlc1xuZXhwb3J0IGNsYXNzIFVzZXJUYWJsZVByaXZpbGVnZXMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHByaXZpbGVnZXM6IElBcnJheUJveDxUYWJsZVByaXZpbGVnZT47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVzZXJUYWJsZVByaXZpbGVnZXNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnByaXZpbGVnZXMgPSBCb3guZnJvbUFycmF5KHByb3BzLnByaXZpbGVnZXMgPz8gW10sIHsgb21pdEVtcHR5OiBmYWxzZSB9KTtcblxuICAgIG5ldyBEYXRhYmFzZVF1ZXJ5PFVzZXJUYWJsZVByaXZpbGVnZXNIYW5kbGVyUHJvcHM+KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaGFuZGxlcjogSGFuZGxlck5hbWUuVXNlclRhYmxlUHJpdmlsZWdlcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdXNlcm5hbWU6IHByb3BzLnVzZXIudXNlcm5hbWUsXG4gICAgICAgIHRhYmxlUHJpdmlsZWdlczogdGhpcy5wcml2aWxlZ2VzLmRlcml2ZShwcml2cyA9PlxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwUHJpdmlsZWdlc0J5VGFibGUocHJpdnMpKVxuICAgICAgICAgICAgLm1hcCgoW3RhYmxlSWQsIHRhYmxlUHJpdmlsZWdlc10pID0+ICh7XG4gICAgICAgICAgICAgIHRhYmxlSWQsXG4gICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBlbGVtZW50IGFsd2F5cyBleGlzdHMgc2luY2UgdGhlIGdyb3VwQnkgZWxlbWVudCBpcyBhdCBsZWFzdCBhIHNpbmdsZXRvbi5cbiAgICAgICAgICAgICAgdGFibGVOYW1lOiB0YWJsZVByaXZpbGVnZXNbMF0hLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgYWN0aW9uczogdW5pZnlUYWJsZUFjdGlvbnModGFibGVQcml2aWxlZ2VzKS5tYXAoYWN0aW9uID0+IFRhYmxlQWN0aW9uW2FjdGlvbl0pLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICApIGFzIGFueSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhpcyB1c2VyIGFkZGl0aW9uYWwgcHJpdmlsZWdlcy5cbiAgICovXG4gIGFkZFByaXZpbGVnZXModGFibGU6IElUYWJsZSwgLi4uYWN0aW9uczogVGFibGVBY3Rpb25bXSk6IHZvaWQge1xuICAgIHRoaXMucHJpdmlsZWdlcy5wdXNoKHsgdGFibGUsIGFjdGlvbnMgfSk7XG4gIH1cbn1cblxuY29uc3QgdW5pZnlUYWJsZUFjdGlvbnMgPSAodGFibGVQcml2aWxlZ2VzOiBUYWJsZVByaXZpbGVnZVtdKTogVGFibGVBY3Rpb25bXSA9PiB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQ8VGFibGVBY3Rpb24+KHRhYmxlUHJpdmlsZWdlcy5mbGF0TWFwKHggPT4geC5hY3Rpb25zKSk7XG5cbiAgaWYgKHNldC5oYXMoVGFibGVBY3Rpb24uQUxMKSkge1xuICAgIHJldHVybiBbVGFibGVBY3Rpb24uQUxMXTtcbiAgfVxuXG4gIGlmIChzZXQuaGFzKFRhYmxlQWN0aW9uLlVQREFURSkgfHwgc2V0LmhhcyhUYWJsZUFjdGlvbi5ERUxFVEUpKSB7XG4gICAgc2V0LmFkZChUYWJsZUFjdGlvbi5TRUxFQ1QpO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5zZXRdO1xufTtcblxuY29uc3QgZ3JvdXBQcml2aWxlZ2VzQnlUYWJsZSA9IChwcml2aWxlZ2VzOiByZWFkb25seSBUYWJsZVByaXZpbGVnZVtdKTogUmVjb3JkPHN0cmluZywgVGFibGVQcml2aWxlZ2VbXT4gPT4ge1xuICByZXR1cm4gcHJpdmlsZWdlcy5yZWR1Y2UoKGdyb3VwZWQsIHByaXZpbGVnZSkgPT4ge1xuICAgIGNvbnN0IHsgdGFibGUgfSA9IHByaXZpbGVnZTtcbiAgICBjb25zdCB0YWJsZUlkID0gdGFibGUubm9kZS5pZDtcbiAgICBjb25zdCB0YWJsZVByaXZpbGVnZXMgPSBncm91cGVkW3RhYmxlSWRdID8/IFtdO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ncm91cGVkLFxuICAgICAgW3RhYmxlSWRdOiBbLi4udGFibGVQcml2aWxlZ2VzLCBwcml2aWxlZ2VdLFxuICAgIH07XG4gIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIFRhYmxlUHJpdmlsZWdlW10+KTtcbn07XG4iXX0=