日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制

發布時間:2025/3/21 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Go語言中文網,致力于每日分享編碼、開源等知識,歡迎關注我,會有意想不到的收獲!

身份認證和授權對 web 應用的安全至關重要。最近,我用 Go 完成了我的第一個正式的 web 應用,這篇文章是在這個過程中我所學到的部分內容。

本文中,我們的關注點在于如何在 web 應用中使用開源的 casbin 庫進行 HTTP 權限控制。同時,在示例代碼中我們使用了 scs 庫進行 session 管理。

下面的例子十分基礎,希望它盡可能的展示了如何在 Go web 應用中實現權限控制。為了更側重于展示 casbin 的使用,我們盡量簡化業務邏輯(例如:不需密碼的登陸操作)。我們一起來看一下!

注意:請不要在生產環境中使用所示的用例代碼,該例子側重于描述清晰,而不是安全性。

建立

首先,我們創建一個 User 模型,并實現了相應方法:

type User struct { ID int Name string Role string}type Users []Userfunc (u Users) Exists(id int) bool { ...}func (u Users) FindByName(name string) (User, error) { ...}

接著配置 casbin 所需文件。這里我們需要一個配置文件和一個策略文件。配置文件使用 PERM 元模型。PERM 表示策略(Policy)、效果(Effect)、請求(Request)和匹配器(Matchers)。

在 auth_model.conf 配置文件中有如下內容:

[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[policy_effect]e = some(where (p.eft == allow))[matchers]m = r.sub == p.sub && keyMatch(r.obj, p.obj) && (r.act == p.act || p.act == "*")

其中定義了請求和策略來表示主體,客體和動作。在本例中,主體表示用戶角色,客體表示訪問路徑,action 表示請求方法(例:GET, POST 等)。

匹配器定義了策略是如何匹配的,可以通過直接定義主體,或者使用像 keyMatch 這樣的幫助方法,它也可以匹配通配符。casbin 實際比這個簡單的例子要強大得多,你可以用聲明的方式定義各種自定義功能來達到輕松切換和維護鑒權配置的效果。

在安全性方面,我通常會選擇最簡單的解決方案,因為當系統開始變復雜和難以維護時,錯誤就開始發生。

在這個例子中,策略文件就是一個簡單的 csv 文件,描述了哪些角色可以訪問哪些路徑等。

policy.csv 文件格式如下:

p, admin, /*, *p, anonymous, /login, *p, member, /logout, *p, member, /member/*, *

這個配置文件十分簡單。在這個例子中,我們簡單的定義了 admin 角色可以訪問所有內容,member 角色可以訪問以 /member/ 開頭的路徑和 logout 路徑,未認證用戶可以登陸。

這種形式的好處在于即使應用具有許多規則和用戶角色,它仍然是可維護的。

執行

讓我們從 main 函數開始,將所有的東西都配置好,并啟動 http 服務器:

func main() { // setup casbin auth rules authEnforcer, err := casbin.NewEnforcerSafe("./auth_model.conf

總結

以上是生活随笔為你收集整理的实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。