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 utils.can_access( sm, 'schema_access', schema_perm, g.user): 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 utils.can_access(sm, 'schema_access', schema_perm, g.user): 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 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]
def can_access(self, permission_name, view_name, user=None): if not user: user = g.user return utils.can_access(appbuilder.sm, permission_name, view_name, user)
def can_access(self, permission_name, view_name, user=None): if not user: user = g.user return utils.can_access( appbuilder.sm, permission_name, view_name, user)