BI工具——superset(master)接口鑒權(quán)

開干

繼承關(guān)系:
SupersetSecurityManager->SecurityManager->BaseSecurityManager->AbstractSecurityManager->BaseManager
其中除了第一個,其他的類已經(jīng)是在flask_appbuilder范疇强挫,可見是基于flask_appbuilder磅网。

__init__.py中

custom_sm = app.config.get('CUSTOM_SECURITY_MANAGER') or SupersetSecurityManager
if not issubclass(custom_sm, SupersetSecurityManager):
    raise Exception(
        """Your CUSTOM_SECURITY_MANAGER must now extend SupersetSecurityManager,
         not FAB's security manager.
         See [4565] in UPDATING.md""")

appbuilder = AppBuilder(
    app,
    db.session,
    base_template='superset/base.html',
    indexview=MyIndexView,
    security_manager_class=custom_sm,
    update_perms=utils.get_update_perms_flag(),
)

如果沒有傳入security_manager_class參數(shù)拱层,appbuilder將會使用from flask_appbuilder.security.sqla.manager import SecurityManager(即SupersetSecurityManager的父類)作為security_manager纤子。

所有配置基本都在BaseSecurityManager類中园蝠,

...
    def __init__(self, appbuilder):
        super(BaseSecurityManager, self).__init__(appbuilder)
        app = self.appbuilder.get_app
...
    authdbview = AuthDBView
    """ Override if you want your own Authentication DB view """

并且通過flask_appbuilder提供的方法獲取配置類型的方法

def auth_type(self):
    return self.appbuilder.get_app.config['AUTH_TYPE']

找到superset項(xiàng)目的config.py文件中唆姐,

from flask_appbuilder.security.manager import AUTH_DB
...
AUTH_TYPE = AUTH_DB

因此狡门,默認(rèn)的鑒權(quán)方式是AUTH_DB瑟押,flask_appbuilder的base.py中appbuilder類下

...
    @property
    def get_url_for_login(self):
        return url_for("%s.%s" % (self.sm.auth_view.endpoint, "login"))

    @property
    def get_url_for_logout(self):
        return url_for("%s.%s" % (self.sm.auth_view.endpoint, "logout"))
...

可見使用AUTH_TYPE指定的鑒權(quán)方式對登入登出進(jìn)行校驗(yàn)搀捷。

BaseView類中

...
    # If endpoint name is not provided, get it from the class name
    self.endpoint = endpoint or self.__class__.__name__
...

鑒權(quán)

現(xiàn)在來看看appbuilder內(nèi)對登錄的鑒權(quán)邏輯,

class AuthDBView(AuthView):
    login_template = 'appbuilder/general/security/login_db.html'

    @expose('/login/', methods=['GET', 'POST'])
    def login(self):
        if g.user is not None and g.user.is_authenticated():
            return redirect(self.appbuilder.get_url_for_index)
        form = LoginForm_db()
        if form.validate_on_submit():
            # 調(diào)用 auth_user_db 驗(yàn)證多望,內(nèi)部調(diào)用 check_password_hash 
            # 比對表單中的password和數(shù)據(jù)庫的哈希值是否匹配
            user = self.appbuilder.sm.auth_user_db(form.username.data, form.password.data)
            if not user:
                flash(as_unicode(self.invalid_login_message), 'warning')
                return redirect(self.appbuilder.get_url_for_login)
            # 驗(yàn)證通過調(diào)用login_user生成認(rèn)證信息
            login_user(user, remember=False)
            return redirect(self.appbuilder.get_url_for_index)
        return self.render_template(self.login_template,
                               title=self.title,
                               form=form,
                               appbuilder=self.appbuilder)

iframe集成superset

  1. superset基本設(shè)置
D壑邸!先登錄后鑒權(quán)怀偷,登錄和鑒權(quán)是分離的<已帷!

將PUBLIC_ROLE_LIKE_GAMMA設(shè)置為True椎工,并給public角色增加can explore on Superset, can explore json on Superset, all database access on all_database_access三種權(quán)限饭于,最后一種看你需要。這種方式會將所有請求視為來自最高權(quán)限用戶维蒙,本質(zhì)其實(shí)就是【無登錄有鑒權(quán)】掰吕,但也僅針對iframe或者chart表詳情頁無需登錄,即可擁有public的權(quán)限颅痊。

需要關(guān)聯(lián)(設(shè)置為Ture)才能使頁面上對public角色的權(quán)限配置生效

為了明確殖熟,這里展示了我這邊public現(xiàn)有配置的權(quán)限??


image.png
  1. 如果一個web應(yīng)用想要集成superset的圖表,且要求數(shù)據(jù)接口僅對特定應(yīng)用開放斑响,那就需要修改鑒權(quán)方式菱属,將原來通過提交用戶名和密碼的鑒權(quán)方式替換為自己的應(yīng)用認(rèn)證方式。
    方式如下:
    2.1 繼承AuthDBView類恋捆,重寫login方法照皆,大致邏輯如下:從鏈接中獲取token->對token鑒權(quán)->成功或失敗跳轉(zhuǎn)(攜帶參數(shù));
    2.2 繼承SupersetSecurityManager類沸停,將AuthDBView子類賦值給authdbview膜毁;
    2.3 修改config文件,將SupersetSecurityManager子類賦值給CUSTOM_SECURITY_MANAGER。
    ** 鑒權(quán)類的接口我認(rèn)為都可以放在這個視圖下面瘟滨。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末候醒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杂瘸,更是在濱河造成了極大的恐慌倒淫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败玉,死亡現(xiàn)場離奇詭異敌土,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)运翼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門返干,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人血淌,你說我怎么就攤上這事矩欠。” “怎么了悠夯?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵癌淮,是天一觀的道長。 經(jīng)常有香客問我沦补,道長乳蓄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任策彤,我火速辦了婚禮栓袖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘店诗。我一直安慰自己裹刮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布庞瘸。 她就那樣靜靜地躺著捧弃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擦囊。 梳的紋絲不亂的頭發(fā)上违霞,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音瞬场,去河邊找鬼买鸽。 笑死,一個胖子當(dāng)著我的面吹牛贯被,可吹牛的內(nèi)容都是我干的眼五。 我是一名探鬼主播妆艘,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼看幼!你這毒婦竟也來了批旺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤诵姜,失蹤者是張志新(化名)和其女友劉穎汽煮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚唆,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暇赤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瑟俭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翎卓。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摆寄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坯门,我是刑警寧澤微饥,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站古戴,受9級特大地震影響欠橘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜现恼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一肃续、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叉袍,春花似錦始锚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至润文,卻和暖如春姐呐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背典蝌。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工曙砂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骏掀。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓鸠澈,卻偏偏與公主長得像乔夯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子款侵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容