@aws-cdk/aws-redshift-alpha
Version:
The CDK Construct Library for AWS::Redshift
116 lines • 14.1 kB
JavaScript
;
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=