diff --git a/superset/connectors/druid/views.py b/superset/connectors/druid/views.py index 02b8cb4891ef6..d5401caf92986 100644 --- a/superset/connectors/druid/views.py +++ b/superset/connectors/druid/views.py @@ -11,13 +11,13 @@ from flask import flash, Markup, redirect from flask_appbuilder import CompactCRUDMixin, expose from flask_appbuilder.models.sqla.interface import SQLAInterface +from flask_appbuilder.security.decorators import has_access from flask_babel import gettext as __ from flask_babel import lazy_gettext as _ from superset import appbuilder, db, security_manager, utils from superset.connectors.base.views import DatasourceModelView from superset.connectors.connector_registry import ConnectorRegistry -from superset.utils import has_access from superset.views.base import ( BaseSupersetView, DatasourceFilter, DeleteMixin, get_datasource_exist_error_mgs, ListWidgetWithCheckboxes, SupersetModelView, diff --git a/superset/connectors/sqla/views.py b/superset/connectors/sqla/views.py index 16a218fd39e7b..e3fb14d07f254 100644 --- a/superset/connectors/sqla/views.py +++ b/superset/connectors/sqla/views.py @@ -9,13 +9,13 @@ from flask_appbuilder import CompactCRUDMixin, expose from flask_appbuilder.actions import action from flask_appbuilder.models.sqla.interface import SQLAInterface +from flask_appbuilder.security.decorators import has_access from flask_babel import gettext as __ from flask_babel import lazy_gettext as _ from past.builtins import basestring from superset import appbuilder, db, security_manager, utils from superset.connectors.base.views import DatasourceModelView -from superset.utils import has_access from superset.views.base import ( DatasourceFilter, DeleteMixin, get_datasource_exist_error_mgs, ListWidgetWithCheckboxes, SupersetModelView, YamlExportMixin, diff --git a/superset/utils.py b/superset/utils.py index 4163739bd4ae3..828111f6b934d 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -25,13 +25,7 @@ import bleach import celery from dateutil.parser import parse -from flask import flash, Markup, redirect, render_template, request, url_for -from flask_appbuilder._compat import as_unicode -from flask_appbuilder.const import ( - FLAMSG_ERR_SEC_ACCESS_DENIED, - LOGMSG_ERR_SEC_ACCESS_DENIED, - PERMISSION_PREFIX, -) +from flask import flash, Markup, render_template from flask_babel import gettext as __ from flask_cache import Cache import markdown as md @@ -653,42 +647,6 @@ def get_email_address_list(address_string): return address_string -def has_access(f): - """ - Use this decorator to enable granular security permissions to your - methods. Permissions will be associated to a role, and roles are - associated to users. - - By default the permission's name is the methods name. - - Forked from the flask_appbuilder.security.decorators - TODO(bkyryliuk): contribute it back to FAB - """ - if hasattr(f, '_permission_name'): - permission_str = f._permission_name - else: - permission_str = f.__name__ - - def wraps(self, *args, **kwargs): - permission_str = PERMISSION_PREFIX + f._permission_name - if self.appbuilder.sm.has_access(permission_str, - self.__class__.__name__): - return f(self, *args, **kwargs) - else: - logging.warning( - LOGMSG_ERR_SEC_ACCESS_DENIED.format(permission_str, - self.__class__.__name__)) - flash(as_unicode(FLAMSG_ERR_SEC_ACCESS_DENIED), 'danger') - # adds next arg to forward to the original path once user is logged in. - return redirect( - url_for( - self.appbuilder.sm.auth_view.__class__.__name__ + '.login', - next=request.full_path)) - - f._permission_name = permission_str - return functools.update_wrapper(wraps, f) - - def choicify(values): """Takes an iterable and makes an iterable of tuples with it""" return [(v, v) for v in values] diff --git a/superset/views/core.py b/superset/views/core.py index d155fa3189ada..91a420ae2886a 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -19,7 +19,7 @@ from flask_appbuilder import expose, SimpleFormView from flask_appbuilder.actions import action from flask_appbuilder.models.sqla.interface import SQLAInterface -from flask_appbuilder.security.decorators import has_access_api +from flask_appbuilder.security.decorators import has_access, has_access_api from flask_babel import gettext as __ from flask_babel import lazy_gettext as _ import pandas as pd @@ -46,7 +46,7 @@ from superset.models.sql_lab import Query from superset.sql_parse import SupersetQuery from superset.utils import ( - has_access, merge_extra_filters, merge_request_params, QueryStatus, + merge_extra_filters, merge_request_params, QueryStatus, ) from .base import ( api, BaseSupersetView, CsvResponse, DeleteMixin,