付費限定

存取控制與 Oso

閱讀時間約 25 分鐘
raw-image

Oso(西班牙文的「熊」)是跨語言、跨框架的存取控制服務,它也有開源套件,本文主要介紹它的開源套件。

在進入 Oso 前,先簡單認識一下存取控制。

存取控制

「存取控制」英文叫 access control,市場上有許多不同的存取控制模型,他們的縮寫大多是 xAC,是 xxx access control 的意思。

存取控制是多人系統必備的要素之一,例如常見的 WordPress,它內建了幾個預先定義好的角色:

WordPress 角色

WordPress 角色

如圖所見,每個角色的能執行的權限不同,而每個帳號必定要賦予一個角色,形成「帳號—角色」這樣的關係,每個角色能執行的項目不同,例如編輯、管理員才能刪除文章,但除了這種系統面的權限外,每篇文章也有自身的權限,例如A作者不能改B作者的文章。

像 WordPress 這樣,以角色為基礎的存取控制模型,我們稱為「RBAC(role-based access control)」。

RBAC 的概念是以角色為中心的,也就是批假單的權限是綁在店長這個角色身上,而不是綁在王小臻身上,王小臻之所以能批假單,是因為她被賦予了店長的角色。

除了 RBAC 外,視系統的應用場景和複雜度不同還有其他的 xAC,未來有遇到再說,畫面先交還給棚內的 Oso。

Oso 簡介

一般要做一個 RBAC 機制,有可能自幹,但秉持著不要重新發明輪子的原則,還是交給專業的來吧!

快速帶過 Oso 的特點:

  • 跨平台,Python、Rust、Node.js、Ruby、Go、Java,這算跨很大了吧。
  • Oso 開發了一種專門用於制定安全政策的語言 Polar,加上 Oso 本身又是跨平台的,因此 Oso 這層存取控制可以與系統語言、框架本身作一定程度的分離,避免炒出義大利麵。
  • 角色與權限應用的對象可以細至「資源」,可以做到像 WP 那樣A不能改B的文章。
  • 背後有商業化服務,不用擔心哪天作者跑路或被腰斬。(請不要舉冨樫當反例謝謝)

Oso 與 Flask

Oso 好不好強不強不知道,先用一波感受一下。

下面是一個極簡的 Flask + Oso 專案:

Oso 專案

這個專案與 Oso 文件中的示範專案大致相同,但略作修改:

  • 用 Poetry 取代 requirements.txt
  • 相容於 Python 3.7 以上版本

進入 Poetry 虛擬環境後把這 Flask 跑起來:

FLASK_APP=app.server python -m flask run

就會看到下面的訊息:

 * Serving Flask app 'app.server' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

瀏覽器打開 http://localhost:5000/repo/gmail 會看到正確的內容:

Gmail repo

Gmail repo

而打開 http://localhost:5000/repo/react 則會看到錯誤的內容:

React repo

React repo

為什麼會這樣呢?從 routing 開始找原因,打開 app/server.py 可以看到負責處理上面路由的函式 repo_show()


以行動支持創作者!付費即可解鎖
本篇內容共 10157 字、0 則留言,僅發佈於尊榮訂閱方案專屬 VIP 小房間你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
    avatar-img
    15會員
    64內容數
    Where I go and what I get.
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    Leon的沙龍 的其他內容
    古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
    古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
    你可能也想看
    Google News 追蹤
    Thumbnail
    支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
    Thumbnail
    寫作投資永遠不嫌晚,這是雙寶老爹的第#150篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
    Thumbnail
    Asterisk株式會社的黑木先生分享了他們如何透過引進Odoo ERP來優化全球業務流程的經驗。這篇文章分享了Odoo導入的範圍、特點、公司背景與決定導入Odoo的過程、導入Odoo後的變化,以及在臺灣如何導入Odoo的相關資訊。
    Thumbnail
    代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
    Thumbnail
    來自OKZOO的最新鏈上萌寵冒險!加入我們,一起探索這個充滿樂趣的區塊鏈遊戲世界,體驗無與倫比的遊戲樂趣和獨特的社交互動。別錯過成為早期參與者的機會,立即加入我們的遊戲行列,開啟你的OKZOO之旅!
    Thumbnail
    支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
    Thumbnail
    寫作投資永遠不嫌晚,這是雙寶老爹的第#150篇關於加密貨幣教學文章,文未還有更多精彩的教學內容!
    Thumbnail
    Asterisk株式會社的黑木先生分享了他們如何透過引進Odoo ERP來優化全球業務流程的經驗。這篇文章分享了Odoo導入的範圍、特點、公司背景與決定導入Odoo的過程、導入Odoo後的變化,以及在臺灣如何導入Odoo的相關資訊。
    Thumbnail
    代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
    Thumbnail
    來自OKZOO的最新鏈上萌寵冒險!加入我們,一起探索這個充滿樂趣的區塊鏈遊戲世界,體驗無與倫比的遊戲樂趣和獨特的社交互動。別錯過成為早期參與者的機會,立即加入我們的遊戲行列,開啟你的OKZOO之旅!