def test_sql_json_has_access(self): main_db = (db.session.query( models.Database).filter_by(database_name="main").first()) utils.merge_perm(sm, 'database_access', main_db.perm) db.session.commit() main_db_permission_view = (db.session.query( ab_models.PermissionView).join(ab_models.ViewMenu).filter( ab_models.ViewMenu.name == '[main].(id:1)').first()) astronaut = sm.add_role("Astronaut") sm.add_permission_role(astronaut, main_db_permission_view) # Astronaut role is Gamma + main db permissions for gamma_perm in sm.find_role('Gamma').permissions: sm.add_permission_role(astronaut, gamma_perm) gagarin = appbuilder.sm.find_user('gagarin') if not gagarin: appbuilder.sm.add_user('gagarin', 'Iurii', 'Gagarin', '*****@*****.**', appbuilder.sm.find_role('Astronaut'), password='******') data = self.run_sql('SELECT * FROM ab_user', 'gagarin') db.session.query(models.Query).delete() db.session.commit() assert len(data['data']) > 0
def test_filter_druid_datasource(self): gamma_ds = DruidDatasource( datasource_name="datasource_for_gamma", ) db.session.add(gamma_ds) no_gamma_ds = DruidDatasource( datasource_name="datasource_not_for_gamma", ) db.session.add(no_gamma_ds) db.session.commit() utils.merge_perm(sm, 'datasource_access', gamma_ds.perm) utils.merge_perm(sm, 'datasource_access', no_gamma_ds.perm) db.session.commit() gamma_ds_permission_view = ( db.session.query(ab_models.PermissionView) .join(ab_models.ViewMenu) .filter(ab_models.ViewMenu.name == gamma_ds.perm) .first() ) sm.add_permission_role(sm.find_role('Gamma'), gamma_ds_permission_view) self.login(username='******') url = '/druiddatasourcemodelview/list/' resp = self.client.get(url, follow_redirects=True) assert 'datasource_for_gamma' in resp.data.decode('utf-8') assert 'datasource_not_for_gamma' not in resp.data.decode('utf-8')
def test_sql_json_has_access(self): main_db = ( db.session.query(models.Database).filter_by(database_name="main").first() ) utils.merge_perm(sm, 'database_access', main_db.perm) db.session.commit() main_db_permission_view = ( db.session.query(ab_models.PermissionView) .join(ab_models.ViewMenu) .filter(ab_models.ViewMenu.name == '[main].(id:1)') .first() ) astronaut = sm.add_role("Astronaut") sm.add_permission_role(astronaut, main_db_permission_view) # Astronaut role is Gamma + main db permissions for gamma_perm in sm.find_role('Gamma').permissions: sm.add_permission_role(astronaut, gamma_perm) gagarin = appbuilder.sm.find_user('gagarin') if not gagarin: appbuilder.sm.add_user( 'gagarin', 'Iurii', 'Gagarin', '*****@*****.**', appbuilder.sm.find_role('Astronaut'), password='******') data = self.run_sql('SELECT * FROM ab_user', 'gagarin') db.session.query(models.Query).delete() db.session.commit() assert len(data['data']) > 0
def test_filter_druid_datasource(self): CLUSTER_NAME = 'new_druid' cluster = self.get_or_create(DruidCluster, {'cluster_name': CLUSTER_NAME}, db.session) db.session.merge(cluster) gamma_ds = self.get_or_create( DruidDatasource, {'datasource_name': 'datasource_for_gamma'}, db.session) gamma_ds.cluster = cluster db.session.merge(gamma_ds) no_gamma_ds = self.get_or_create( DruidDatasource, {'datasource_name': 'datasource_not_for_gamma'}, db.session) no_gamma_ds.cluster = cluster db.session.merge(no_gamma_ds) utils.merge_perm(sm, 'datasource_access', gamma_ds.perm) utils.merge_perm(sm, 'datasource_access', no_gamma_ds.perm) db.session.commit() perm = sm.find_permission_view_menu('datasource_access', gamma_ds.perm) sm.add_permission_role(sm.find_role('Gamma'), perm) db.session.commit() self.login(username='******') url = '/druiddatasourcemodelview/list/' resp = self.get_resp(url) assert 'datasource_for_gamma' in resp assert 'datasource_not_for_gamma' not in resp
def test_filter_druid_datasource(self): CLUSTER_NAME = 'new_druid' cluster = self.get_or_create( DruidCluster, {'cluster_name': CLUSTER_NAME}, db.session) db.session.merge(cluster) gamma_ds = self.get_or_create( DruidDatasource, {'datasource_name': 'datasource_for_gamma'}, db.session) gamma_ds.cluster = cluster db.session.merge(gamma_ds) no_gamma_ds = self.get_or_create( DruidDatasource, {'datasource_name': 'datasource_not_for_gamma'}, db.session) no_gamma_ds.cluster = cluster db.session.merge(no_gamma_ds) utils.merge_perm(sm, 'datasource_access', gamma_ds.perm) utils.merge_perm(sm, 'datasource_access', no_gamma_ds.perm) db.session.commit() perm = sm.find_permission_view_menu('datasource_access', gamma_ds.perm) sm.add_permission_role(sm.find_role('Gamma'), perm) db.session.commit() self.login(username='******') url = '/druiddatasourcemodelview/list/' resp = self.get_resp(url) assert 'datasource_for_gamma' in resp assert 'datasource_not_for_gamma' not in resp
def post_add(self, table): try: table.fetch_metadata() except Exception as e: logging.exception(e) flash( "Table [{}] doesn't seem to exist, " "couldn't fetch metadata".format(table.table_name), "danger") utils.merge_perm(sm, 'datasource_access', table.perm)
def post_add(self, datasource): datasource.generate_metrics() utils.merge_perm(sm, 'datasource_access', datasource.perm)
def pre_add(self, db): conn = sqla.engine.url.make_url(db.sqlalchemy_uri) db.password = conn.password conn.password = "******" * 10 if conn.password else None db.sqlalchemy_uri = str(conn) # hides the password utils.merge_perm(sm, 'database_access', db.perm)