diff --git a/panoramix/static/panoramix.js b/panoramix/static/panoramix.js index a7a59271cf4fe..7d97d273e1b98 100644 --- a/panoramix/static/panoramix.js +++ b/panoramix/static/panoramix.js @@ -64,7 +64,7 @@ function initializeDatasourceView() { } }) add_filter(); - $("#druidify").click(druidify); + $(".druidify").click(druidify); function create_choices(term, data) { var filtered = $(data).filter(function() { diff --git a/panoramix/templates/panoramix/datasource.html b/panoramix/templates/panoramix/datasource.html index cedb23deaaf48..2838585d6ca3c 100644 --- a/panoramix/templates/panoramix/datasource.html +++ b/panoramix/templates/panoramix/datasource.html @@ -8,11 +8,16 @@

{{ datasource.name }} {% if datasource.description %} - + {% endif %} - - - +
+ + + + +


@@ -68,7 +73,7 @@

Filters


- diff --git a/panoramix/utils.py b/panoramix/utils.py index 99e1c8230afe9..0a9fa621f34aa 100644 --- a/panoramix/utils.py +++ b/panoramix/utils.py @@ -63,6 +63,12 @@ def dttm_from_timtuple(d): d.tm_year, d.tm_mon, d.tm_mday, d.tm_hour, d.tm_min, d.tm_sec) +def merge_perm(sm, permission_name, view_menu_name): + pv = sm.find_permission_view_menu(permission_name, view_menu_name) + if not pv: + sm.add_permission_view_menu(permission_name, view_menu_name) + + def parse_human_timedelta(s): """ Use the parsedatetime lib to return ``datetime.datetime`` from human @@ -118,9 +124,12 @@ def init(): """ from panoramix import appbuilder from panoramix import models + from flask_appbuilder.security.sqla import models as ab_models sm = appbuilder.sm alpha = sm.add_role("Alpha") - from flask_appbuilder.security.sqla import models as ab_models + + merge_perm(sm, 'all_datasource_access', 'all_datasource_access') + perms = db.session.query(ab_models.PermissionView).all() for perm in perms: if perm.view_menu.name not in ( @@ -142,10 +151,13 @@ def init(): 'can_save', 'can_download', 'muldelete', + 'all_datasource_access', )): sm.add_permission_role(gamma, perm) session = db.session() - for table in session.query(models.SqlaTable).all(): - sm.add_permission_view_menu('datasource_access', table.perm) - for druid_datasource in session.query(models.Datasource).all(): - sm.add_permission_view_menu('datasource_access', druid_datasource.perm) + table_perms = [ + table.perm for table in session.query(models.SqlaTable).all()] + table_perms += [ + table.perm for table in session.query(models.Datasource).all()] + for table_perm in table_perms: + merge_perm(sm, 'datasource_access', table.perm) diff --git a/panoramix/views.py b/panoramix/views.py index 9c803c9672fa1..bb5b4357225df 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -11,7 +11,7 @@ from sqlalchemy import create_engine from wtforms.validators import ValidationError -from panoramix import appbuilder, db, models, viz, utils, app +from panoramix import appbuilder, db, models, viz, utils, app, sm config = app.config @@ -124,10 +124,17 @@ class TableView(PanoramixModelView, DeleteMixin): related_views = [TableColumnInlineView, SqlMetricInlineView] def post_add(self, table): - table.fetch_metadata() + try: + table.fetch_metadata() + except Exception as 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_update(self, table): - table.fetch_metadata() + self.post_add(table) appbuilder.add_view( TableView, @@ -203,10 +210,10 @@ class DatasourceModelView(PanoramixModelView, DeleteMixin): def post_add(self, datasource): datasource.generate_metrics() + utils.merge_perm(sm, 'datasource_access', table.perm) def post_update(self, datasource): - datasource.generate_metrics() - + self.post_add(datasource) appbuilder.add_view( DatasourceModelView, @@ -244,10 +251,11 @@ def datasource(self, datasource_type, datasource_id): .first() ) - if 'Gamma' in [r.name for r in g.user.roles]: + all_datasource_access = self.appbuilder.sm.has_access( + 'all_datasource_access', 'all_datasource_access') datasource_access = self.appbuilder.sm.has_access( 'datasource_access', datasource.perm) - if not datasource_access: + if not all_datasource_access or not datasource_access: flash( "You don't seem to have access to this datasource", "danger")