def datasource_access_by_name( self, database, datasource_name, schema=None): if self.database_access(database) or self.all_datasource_access(): return True schema_perm = utils.get_schema_perm(database, schema) if schema and self.can_access('schema_access', schema_perm): return True datasources = ConnectorRegistry.query_datasources_by_name( db.session, database, datasource_name, schema=schema) for datasource in datasources: if self.can_access('datasource_access', datasource.perm): return True return False
def datasource_access_by_name( self, database, datasource_name, schema=None): if self.database_access(database) or self.all_datasource_access(): return True schema_perm = utils.get_schema_perm(database, schema) if schema and self.can_access('schema_access', schema_perm): return True datasources = ConnectorRegistry.query_datasources_by_name( db.session, database, datasource_name, schema=schema) for datasource in datasources: if self.can_access("datasource_access", datasource.perm): return True return False
def schemas_accessible_by_user(self, database, schemas): if self.database_access(database) or self.all_datasource_access(): return schemas subset = set() for schema in schemas: schema_perm = utils.get_schema_perm(database, schema) if self.can_access('schema_access', schema_perm): subset.add(schema) perms = self.user_datasource_perms() if perms: tables = (db.session.query(SqlaTable).filter( SqlaTable.perm.in_(perms), SqlaTable.database_id == database.id, ).all()) for t in tables: if t.schema: subset.add(t.schema) return sorted(list(subset))
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 schemas_accessible_by_user(self, database, schemas): if self.database_access(database) or self.all_datasource_access(): return schemas subset = set() for schema in schemas: schema_perm = utils.get_schema_perm(database, schema) if self.can_access('schema_access', schema_perm): subset.add(schema) perms = self.user_datasource_perms() if perms: tables = ( db.session.query(SqlaTable) .filter( SqlaTable.perm.in_(perms), SqlaTable.database_id == database.id, ) .all() ) for t in tables: if t.schema: subset.add(t.schema) return sorted(list(subset))
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 schema_perm(self): """Returns schema permission if present, cluster one otherwise.""" return utils.get_schema_perm(self.cluster, self.schema)
def schema_perm(self): """Returns schema permission if present, database one otherwise.""" return utils.get_schema_perm(self.database, self.schema)
def schema_perm(self): """Returns schema permission if present, cluster one otherwise.""" return utils.get_schema_perm(self.cluster, self.schema)
def schema_perm(self): """Returns schema permission if present, database one otherwise.""" return utils.get_schema_perm(self.database, self.schema)