实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制
Go語言中文網(wǎng),致力于每日分享編碼、開源等知識,歡迎關(guān)注我,會(huì)有意想不到的收獲!
身份認(rèn)證和授權(quán)對 web 應(yīng)用的安全至關(guān)重要。最近,我用 Go 完成了我的第一個(gè)正式的 web 應(yīng)用,這篇文章是在這個(gè)過程中我所學(xué)到的部分內(nèi)容。
本文中,我們的關(guān)注點(diǎn)在于如何在 web 應(yīng)用中使用開源的 casbin 庫進(jìn)行 HTTP 權(quán)限控制。同時(shí),在示例代碼中我們使用了 scs 庫進(jìn)行 session 管理。
下面的例子十分基礎(chǔ),希望它盡可能的展示了如何在 Go web 應(yīng)用中實(shí)現(xiàn)權(quán)限控制。為了更側(cè)重于展示 casbin 的使用,我們盡量簡化業(yè)務(wù)邏輯(例如:不需密碼的登陸操作)。我們一起來看一下!
注意:請不要在生產(chǎn)環(huán)境中使用所示的用例代碼,該例子側(cè)重于描述清晰,而不是安全性。
建立
首先,我們創(chuàng)建一個(gè) User 模型,并實(shí)現(xiàn)了相應(yīng)方法:
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 所需文件。這里我們需要一個(gè)配置文件和一個(gè)策略文件。配置文件使用 PERM 元模型。PERM 表示策略(Policy)、效果(Effect)、請求(Request)和匹配器(Matchers)。
在 auth_model.conf 配置文件中有如下內(nèi)容:
[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 == "*")其中定義了請求和策略來表示主體,客體和動(dòng)作。在本例中,主體表示用戶角色,客體表示訪問路徑,action 表示請求方法(例:GET, POST 等)。
匹配器定義了策略是如何匹配的,可以通過直接定義主體,或者使用像 keyMatch 這樣的幫助方法,它也可以匹配通配符。casbin 實(shí)際比這個(gè)簡單的例子要強(qiáng)大得多,你可以用聲明的方式定義各種自定義功能來達(dá)到輕松切換和維護(hù)鑒權(quán)配置的效果。
在安全性方面,我通常會(huì)選擇最簡單的解決方案,因?yàn)楫?dāng)系統(tǒng)開始變復(fù)雜和難以維護(hù)時(shí),錯(cuò)誤就開始發(fā)生。
在這個(gè)例子中,策略文件就是一個(gè)簡單的 csv 文件,描述了哪些角色可以訪問哪些路徑等。
policy.csv 文件格式如下:
p, admin, /*, *p, anonymous, /login, *p, member, /logout, *p, member, /member/*, *這個(gè)配置文件十分簡單。在這個(gè)例子中,我們簡單的定義了 admin 角色可以訪問所有內(nèi)容,member 角色可以訪問以 /member/ 開頭的路徑和 logout 路徑,未認(rèn)證用戶可以登陸。
這種形式的好處在于即使應(yīng)用具有許多規(guī)則和用戶角色,它仍然是可維護(hù)的。
執(zhí)行
讓我們從 main 函數(shù)開始,將所有的東西都配置好,并啟動(dòng) http 服務(wù)器:
func main() { // setup casbin auth rules authEnforcer, err := casbin.NewEnforcerSafe("./auth_model.conf總結(jié)
以上是生活随笔為你收集整理的实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手术步骤_做过 激光手术 恢复视力 的人
- 下一篇: 宜出行热力图怎么抓取_滴滴听不到单怎么办