付費限定

存取控制與 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
留言分享你的想法!
avatar-img
Leon的沙龍
15會員
64內容數
Where I go and what I get.
Leon的沙龍的其他內容
2024/04/10
Goolge OR-Tools 是一套以數學模型為基礎的求解器,相較於 OptaPlanner,OR-Tools 有更平緩的學習曲線,本文是 OR-Tools 最基礎的介紹。
Thumbnail
2024/04/10
Goolge OR-Tools 是一套以數學模型為基礎的求解器,相較於 OptaPlanner,OR-Tools 有更平緩的學習曲線,本文是 OR-Tools 最基礎的介紹。
Thumbnail
2024/04/09
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
2024/04/09
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
2024/04/09
SpiffWorkflow 是一個專門針對業務流程的流程引擎,它與商業 BPMN 產品有所區別,適合應用在自有專案中,並且需要內含稍微複雜的商業流程。例如,對於需要外部程式與前端配合才能真正讓用戶輸入決斷的場景,SpiffWorkflow 是一個適合的解決方案。
Thumbnail
2024/04/09
SpiffWorkflow 是一個專門針對業務流程的流程引擎,它與商業 BPMN 產品有所區別,適合應用在自有專案中,並且需要內含稍微複雜的商業流程。例如,對於需要外部程式與前端配合才能真正讓用戶輸入決斷的場景,SpiffWorkflow 是一個適合的解決方案。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本文介紹如何使用 TG Bot 來操作 MongoDB,包括讀取所有 domain、讀取特定 domain、新增 domain、批量新增 domain、修改 domain 和刪除 domain。透過 TG Bot 的指令操作,實現了自動化管理和多環境管理。
Thumbnail
本文介紹如何使用 TG Bot 來操作 MongoDB,包括讀取所有 domain、讀取特定 domain、新增 domain、批量新增 domain、修改 domain 和刪除 domain。透過 TG Bot 的指令操作,實現了自動化管理和多環境管理。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
本篇介紹跨平台存取控制系統 Oso 以及它的規則語言 Polar,用他們替專案建立 RBAC 以及資源級的存取控制。
Thumbnail
本篇介紹跨平台存取控制系統 Oso 以及它的規則語言 Polar,用他們替專案建立 RBAC 以及資源級的存取控制。
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News