superset详解(五)--视图生成

superset的权限和视图是不可分割的,下面我们来看看视图是怎么生成的。视图可以分为3类,菜单视图,普通视图(不生成菜单的视图,只添加链接),资源视图。
前2类视图是flaskappbuilder控制生成的,后一种视图是sqlalchemy控制生成的。


菜单视图/非菜单视图生成

appbuilder.add_view() 生成菜单视图
appbulier.add_view_no_menu()   生成没有菜单的视图

flask_appbuilder/security/manage.py
    def add_permissions_view(self, base_permissions, view_menu):
        view_menu_db = self.add_view_menu(view_menu)   # 把视图添加到视图表中
        pass

资源视图

superset的资源视图主要是数据库,数据表

数据库权限:
sqla.event.listen(Database, 'after_insert', set_perm)
sqla.event.listen(Database, 'after_update', set_perm)

def get_perm(self):
    return (
        '[{obj.database_name}].(id:{obj.id})').format(obj=self)  

sqlalchemy设置了插入和更新的监听事件,当这些时间发生的时候,就会把改资源对应的视图插入到数据表中。可以看到数据库的视图是由数据库的名字和它的ID组成的

数据表权限:
sa.event.listen(SqlaTable, 'after_insert', set_perm)
sa.event.listen(SqlaTable, 'after_update', set_perm)

def get_perm(self):
      return (
          '[{obj.database}].[{obj.table_name}]'
          '(id:{obj.id})').format(obj=self)

表资源视图的插入和数据库资源视图的插入机制一样,只是视图不一样,表资源的视图是由数据库的名字,表的名字和表的ID组成

你可能感兴趣的:(superset)