天天看點

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組成

繼續閱讀