def get_datasources_accessible_by_user( self, database, datasource_names: List[DatasourceName], schema: str = None) -> List[DatasourceName]: from superset import db if self.database_access(database) or self.all_datasource_access(): return datasource_names if schema: schema_perm = self.get_schema_perm(database, schema) if self.can_access("schema_access", schema_perm): return datasource_names user_perms = self.user_datasource_perms() user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms) if schema: names = { d.table_name for d in user_datasources if d.schema == schema } return [d for d in datasource_names if d in names] else: full_names = {d.full_name for d in user_datasources} return [d for d in datasource_names if d in full_names]
def get_datasources_accessible_by_user( self, database: "Database", datasource_names: List[DatasourceName], schema: Optional[str] = None, ) -> List[DatasourceName]: """ Return the list of SQL tables accessible by the user. :param database: The SQL database :param datasource_names: The list of eligible SQL tables w/ schema :param schema: The fallback SQL schema if not present in the table name :returns: The list of accessible SQL tables w/ schema """ from superset import db if self.database_access(database) or self.all_datasource_access(): return datasource_names if schema: schema_perm = self.get_schema_perm(database, schema) if schema_perm and self.can_access("schema_access", schema_perm): return datasource_names user_perms = self._user_datasource_perms() user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms ) if schema: names = {d.table_name for d in user_datasources if d.schema == schema} return [d for d in datasource_names if d in names] else: full_names = {d.full_name for d in user_datasources} return [d for d in datasource_names if d in full_names]
def get_datasources_accessible_by_user( # pylint: disable=invalid-name self, database: "Database", datasource_names: List[DatasourceName], schema: Optional[str] = None, ) -> List[DatasourceName]: """ Return the list of SQL tables accessible by the user. :param database: The SQL database :param datasource_names: The list of eligible SQL tables w/ schema :param schema: The fallback SQL schema if not present in the table name :returns: The list of accessible SQL tables w/ schema """ if self.can_access_database(database): return datasource_names if schema: schema_perm = self.get_schema_perm(database, schema) if schema_perm and self.can_access("schema_access", schema_perm): return datasource_names user_perms = self.user_view_menu_names("datasource_access") schema_perms = self.user_view_menu_names("schema_access") user_datasources = ConnectorRegistry.query_datasources_by_permissions( self.get_session, database, user_perms, schema_perms ) if schema: names = {d.table_name for d in user_datasources if d.schema == schema} return [d for d in datasource_names if d.table in names] full_names = {d.full_name for d in user_datasources} return [d for d in datasource_names if f"[{database}].[{d}]" in full_names]
def accessible_by_user(self, database, datasource_names, schema=None): if self.database_access(database) or self.all_datasource_access(): return datasource_names if schema: schema_perm = utils.get_schema_perm(database, schema) if self.can_access('schema_access', schema_perm): return datasource_names user_perms = self.user_datasource_perms() user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms) if schema: names = { d.table_name for d in user_datasources if d.schema == schema} return [d for d in datasource_names if d in names] else: full_names = {d.full_name for d in user_datasources} return [d for d in datasource_names if d in full_names]
def accessible_by_user(self, database, datasource_names, schema=None): if self.database_access(database) or self.all_datasource_access(): return datasource_names if schema: schema_perm = utils.get_schema_perm(database, schema) if self.can_access('schema_access', schema_perm): return datasource_names user_perms = self.user_datasource_perms() user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms) if schema: names = { d.table_name for d in user_datasources if d.schema == schema} return [d for d in datasource_names if d in names] else: full_names = {d.full_name for d in user_datasources} return [d for d in datasource_names if d in full_names]
def accessible_by_user(self, database, datasource_names, schema=None): if self.database_access(database) or self.all_datasource_access(): return datasource_names schema_perm = utils.get_schema_perm(database, schema) if schema and utils.can_access(sm, 'schema_access', schema_perm, g.user): return datasource_names role_ids = set([role.id for role in g.user.roles]) # TODO: cache user_perms or user_datasources user_pvms = (db.session.query(ab_models.PermissionView).join( ab_models.Permission).filter( ab_models.Permission.name == 'datasource_access').filter( ab_models.PermissionView.role.any( ab_models.Role.id.in_(role_ids))).all()) user_perms = set([pvm.view_menu.name for pvm in user_pvms]) user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms) full_names = set([d.full_name for d in user_datasources]) return [d for d in datasource_names if d in full_names]
def accessible_by_user(self, database, datasource_names, schema=None): if self.database_access(database) or self.all_datasource_access(): return datasource_names schema_perm = utils.get_schema_perm(database, schema) if schema and utils.can_access( sm, 'schema_access', schema_perm, g.user): return datasource_names role_ids = set([role.id for role in g.user.roles]) # TODO: cache user_perms or user_datasources user_pvms = ( db.session.query(ab_models.PermissionView) .join(ab_models.Permission) .filter(ab_models.Permission.name == 'datasource_access') .filter(ab_models.PermissionView.role.any( ab_models.Role.id.in_(role_ids))) .all() ) user_perms = set([pvm.view_menu.name for pvm in user_pvms]) user_datasources = ConnectorRegistry.query_datasources_by_permissions( db.session, database, user_perms) full_names = set([d.full_name for d in user_datasources]) return [d for d in datasource_names if d in full_names]