22import 'source-map-support/register' ;
33import * as cdk from '@aws-cdk/core' ;
44import { BaselineStack } from '../lib/baseline-stack' ;
5- import { DatalakeStack } from '../lib/datalake-stack' ;
5+ import { DataLakeStack } from '../lib/stacks /datalake-stack' ;
66import { OpenTargetsStack } from '../lib/opentargets-stack' ;
77import { ChemblStack } from '../lib/chembl-25-stack' ;
88import { AnalyticsStack } from '../lib/analytics-stack.js' ;
9+ import iam = require ( '@aws-cdk/aws-iam' ) ;
910import s3 = require ( '@aws-cdk/aws-s3' ) ;
10-
11+ import { DataLakeEnrollment } from '../lib/constructs/data-lake-enrollment' ;
1112
1213const app = new cdk . App ( ) ;
1314const baseline = new BaselineStack ( app , 'BaselineStack' ) ;
1415
1516
16- const coreDataLake = new DatalakeStack ( app , 'CoreDataLake' , {
17+ const coreDataLake = new DataLakeStack ( app , 'CoreDataLake' , {
1718
1819} ) ;
1920
20-
21-
2221const chemblStack = new ChemblStack ( app , 'ChemblStack' , {
2322 database : baseline . ChemblDb ,
2423 accessSecurityGroup : baseline . chemblDBChemblDbAccessSg ,
2524 databaseSecret : baseline . chemblDBSecret ,
26- dataLakeBucket : coreDataLake . DataLakeBucket
25+ DataLake : coreDataLake
2726} ) ;
2827
2928const openTargetsStack = new OpenTargetsStack ( app , 'OpenTargetsStack' , {
3029 sourceBucket : baseline . OpenTargetsSourceBucket ,
3130 sourceBucketDataPrefix : '/opentargets/sourceExports/19.11/output/' ,
32- dataLakeBucket : coreDataLake . DataLakeBucket
31+ DataLake : coreDataLake
3332} ) ;
3433
3534const analyticsStack = new AnalyticsStack ( app , 'AnalyticsStack' , {
3635 targetVpc : baseline . Vpc ,
3736} ) ;
3837
3938
40- chemblStack . grantRead ( analyticsStack . NotebookRole ) ;
41- openTargetsStack . grantRead ( analyticsStack . NotebookRole ) ;
39+ chemblStack . grantIamRead ( analyticsStack . NotebookRole ) ;
40+ openTargetsStack . grantIamRead ( analyticsStack . NotebookRole ) ;
41+
42+
43+
44+
45+
46+
47+
48+
49+ const exampleUser = iam . User . fromUserName ( coreDataLake , 'exampleGrantee' , 'paul1' ) ;
50+
51+ var exampleGrant : DataLakeEnrollment . TablePermissionGrant = {
52+ tables : [ "association_data" , "evidence_data" , "target_list" , "disease_list" ] ,
53+ DatabasePermissions : [ DataLakeEnrollment . DatabasePermission . Alter , DataLakeEnrollment . DatabasePermission . CreateTable , DataLakeEnrollment . DatabasePermission . Drop ] ,
54+ GrantableDatabasePermissions : [ DataLakeEnrollment . DatabasePermission . Alter , DataLakeEnrollment . DatabasePermission . CreateTable , DataLakeEnrollment . DatabasePermission . Drop ] ,
55+ TablePermissions : [ DataLakeEnrollment . TablePermission . Select , DataLakeEnrollment . TablePermission . Insert , DataLakeEnrollment . TablePermission . Delete ] ,
56+ GrantableTablePermissions : [ DataLakeEnrollment . TablePermission . Select ]
57+ } ;
58+
59+ openTargetsStack . grantTablePermissions ( exampleUser , exampleGrant ) ;
60+
61+
62+
63+
64+ // In the example below, we are using the compound_structures table from ChEMBL. It has the following table definition:
65+ // ['molregno', 'molfile', 'standard_inchi', 'standard_inchi_key', 'canonical_smiles']
66+ // Lets say we want to give a principal ONLY select permissions to everything in the compound_structures table BUT the 'canonical_smiles' column.
67+
68+ var exampleTableWithColumnsGrant : DataLakeEnrollment . TableWithColumnPermissionGrant = {
69+ table : "chembl_25_public_compound_structures" ,
70+ // Note that we are NOT including 'canonical_smiles'. That effectivley prevents this user from querying that column.
71+ columns : [ 'molregno' , 'molfile' , 'standard_inchi' , 'standard_inchi_key' ] ,
72+ DatabasePermissions : [ ] ,
73+ GrantableDatabasePermissions : [ ] ,
74+ TableColumnPermissions : [ DataLakeEnrollment . TablePermission . Select ] ,
75+ GrantableTableColumnPermissions : [ ]
76+ } ;
77+
78+ var exampleTableWithColumnsGrant_WithWildCard : DataLakeEnrollment . TableWithColumnPermissionGrant = {
79+ table : "chembl_25_public_compound_structures" ,
80+ wildCardFilter : DataLakeEnrollment . TableWithColumnFilter . Exclude ,
81+ columns : [ 'canonical_smiles' ] ,
82+ DatabasePermissions : [ ] ,
83+ GrantableDatabasePermissions : [ ] ,
84+ TableColumnPermissions : [ DataLakeEnrollment . TablePermission . Select ] ,
85+ GrantableTableColumnPermissions : [ ]
86+ } ;
87+
88+ // Note that exampleTableWithColumnsGrant exampleTableWithColumnsGrant_WithWildCard grants the same effecitve permissions. One just uses a the wildcard.
89+ chemblStack . grantTableWithColumnPermissions ( exampleUser , exampleTableWithColumnsGrant ) ;
0 commit comments