最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang利用casbin實現(xiàn)權(quán)限驗證詳解

 更新時間:2023年02月03日 15:00:59   作者:爺來辣  
Casbin是一個強大的、高效的開源訪問控制框架,其權(quán)限管理機制支持多種訪問控制模型,Casbin只負(fù)責(zé)訪問控制。本文將利用casbin實現(xiàn)權(quán)限驗證功能,需要的可以參考一下

導(dǎo)語

學(xué)習(xí)一下golang權(quán)限控制,保留一下demo代碼作為參考

Casbin是什么

Casbin是一個強大的、高效的開源訪問控制框架,其權(quán)限管理機制支持多種訪問控制模型,Casbin只負(fù)責(zé)訪問控制。

其功能有:

  • 支持自定義請求的格式,默認(rèn)的請求格式為{subject, object, action}。
  • 具有訪問控制模型model和策略policy兩個核心概念。
  • 支持RBAC中的多層角色繼承,不止主體可以有角色,資源也可以具有角色。
  • 支持內(nèi)置的超級用戶 例如:rootadministrator。超級用戶可以執(zhí)行任何操作而無需顯式的權(quán)限聲明。
  • 支持多種內(nèi)置的操作符,如 keyMatch,方便對路徑式的資源進行管理,如 /foo/bar 可以映射到 /foo*

實現(xiàn)思路

package main

import (
	"fmt"
	"github.com/casbin/casbin/v2"
	gormadapter "github.com/casbin/gorm-adapter/v3"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//e, err := casbin.NewEnforcer("model.conf", "policy.csv")  // 本地policy

	a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 數(shù)據(jù)庫policy
	e, _ := casbin.NewEnforcer("./model.conf", a)                                                                                            // model依舊放本地 沒有必要放數(shù)據(jù)庫 把a變成了適配器存到了數(shù)據(jù)庫

	// Load the policy from DB.
	e.LoadPolicy()

	// Check the permission.
	e.Enforce("alice", "data1", "read")

	// Modify the policy.
	// e.AddPolicy(...)
	// e.RemovePolicy(...)

	// Save the policy back to DB.
	e.SavePolicy()
	sub := "alice" // 想要訪問資源的用戶
	obj := "data1" // 將要被訪問的資源
	act := "read"  // 用戶對資源實施的操作
	//added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool類型
	//fmt.Println(added)
	//fmt.Println(err)
	//if err != nil {
	//	// 處理錯誤
	//	fmt.Printf("%s", err)
	//}
	ok, err := e.Enforce(sub, obj, act)

	if err != nil {
		// 處理錯誤
		fmt.Printf("%s", err)
	}

	if ok == true {
		// 允許 alice 讀取 data1
		fmt.Println("通過")
	} else {
		// 拒絕請求,拋出異常
		fmt.Println("未通過")
	}

	// 您可以使用 BatchEnforce() 去批量處理一些請求。
	// 這個方法返回一個布爾類型的切片,切片的下標(biāo)對應(yīng)二位數(shù)組的行標(biāo)
	// 例如 results[0] 是 {"alice", "data1", "read"} 的結(jié)果
	//results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
}

package main

import (
	"fmt"
	"github.com/casbin/casbin/v2"
	gormadapter "github.com/casbin/gorm-adapter/v3"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//e, err := casbin.NewEnforcer("model.conf", "policy.csv")  // 本地policy

	a, _ := gormadapter.NewAdapter("mysql", "root:pass@tcp(localhost:3306)/casbin?charset=utf8mb4&parseTime=True&loc=Local", true) // 數(shù)據(jù)庫policy
	e, _ := casbin.NewEnforcer("./model.conf", a)                                                                                            // model依舊放本地 沒有必要放數(shù)據(jù)庫 把a變成了適配器存到了數(shù)據(jù)庫

	// Load the policy from DB.
	e.LoadPolicy()

	// Check the permission.
	e.Enforce("alice", "data1", "read")

	// Modify the policy.
	// e.AddPolicy(...)
	// e.RemovePolicy(...)

	// Save the policy back to DB.
	e.SavePolicy()
	sub := "alice" // 想要訪問資源的用戶
	obj := "data1" // 將要被訪問的資源
	act := "read"  // 用戶對資源實施的操作
	added, err := e.AddPolicy("alice", "data1", "read") // added返回是bool類型
	fmt.Println(added)

	if err != nil {
		// 處理錯誤
		fmt.Printf("%s", err)
	}
	ok, err := e.Enforce(sub, obj, act)

	if err != nil {
		// 處理錯誤
		fmt.Printf("%s", err)
	}

	if ok == true {
		// 允許 alice 讀取 data1
		fmt.Println("通過")
	} else {
		// 拒絕請求,拋出異常
		fmt.Println("未通過")
	}

	// 您可以使用 BatchEnforce() 去批量處理一些請求。
	// 這個方法返回一個布爾類型的切片,切片的下標(biāo)對應(yīng)二位數(shù)組的行標(biāo)
	// 例如 results[0] 是 {"alice", "data1", "read"} 的結(jié)果
	//results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
}

到此這篇關(guān)于Golang利用casbin實現(xiàn)權(quán)限驗證詳解的文章就介紹到這了,更多相關(guān)Golang casbin權(quán)限驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go Antlr重構(gòu)腳本解釋器實現(xiàn)示例

    go Antlr重構(gòu)腳本解釋器實現(xiàn)示例

    這篇文章主要為大家介紹了go Antlr重構(gòu)腳本解釋器實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • golang中的nil接收器詳解

    golang中的nil接收器詳解

    這篇文章主要介紹了golang中的nil接收器,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 基于Go語言簡單實現(xiàn)事件管理器

    基于Go語言簡單實現(xiàn)事件管理器

    在編程中,事件管理器是一種常見的工具,用于通過通知來觸發(fā)操作,本文將介紹一個簡單的Go事件管理器的實現(xiàn),并通過異步改進提高其性能,感興趣的可以了解下
    2023-11-11
  • Golang數(shù)組的傳遞詳解

    Golang數(shù)組的傳遞詳解

    今天小編就為大家分享一篇關(guān)于Golang數(shù)組的傳遞詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Go語言實現(xiàn)熱更新具體步驟

    Go語言實現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語言實現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言中實現(xiàn)多線程定時任務(wù)的示例代碼

    Go語言中實現(xiàn)多線程定時任務(wù)的示例代碼

    本文主要介紹了Go語言中實現(xiàn)多線程定時任務(wù)的示例代碼,使用goroutine和channel實現(xiàn)輕量級線程及通信,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Go設(shè)計模式之生成器模式詳細講解

    Go設(shè)計模式之生成器模式詳細講解

    生成器模式將一個復(fù)雜對象的構(gòu)建和它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。生成器模式的主要功能是構(gòu)建復(fù)雜的產(chǎn)品,而且是細化地、分步驟地構(gòu)建產(chǎn)品,也就是說生成器模式重在一步一步解決構(gòu)建復(fù)雜對象的問題
    2023-01-01
  • golang?gorm的Callbacks事務(wù)回滾對象操作示例

    golang?gorm的Callbacks事務(wù)回滾對象操作示例

    這篇文章主要為大家介紹了golang?gorm的Callbacks事務(wù)回滾對象操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言并發(fā)技術(shù)詳解

    Go語言并發(fā)技術(shù)詳解

    這篇文章主要介紹了Go語言并發(fā)技術(shù)詳解,本文講解了goroutine、channels、Buffered Channels、Range和Close等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Go使用Redis實現(xiàn)分布式鎖的常見方法

    Go使用Redis實現(xiàn)分布式鎖的常見方法

    Redis?提供了一些原語,可以幫助我們實現(xiàn)高效的分布式鎖,下邊是使用?Redis?實現(xiàn)分布式鎖的一種常見方法,通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-11-11

最新評論

方城县| 二连浩特市| 肥西县| 甘南县| 宣汉县| 满洲里市| 万盛区| 启东市| 于都县| 广宁县| 巴青县| 裕民县| 张家川| 新巴尔虎右旗| 油尖旺区| 金湖县| 鸡西市| 敦化市| 宁都县| 金乡县| 东台市| 克什克腾旗| 施秉县| 广南县| 湛江市| 梅州市| 西平县| 德江县| 平陆县| 比如县| 贵港市| 兴国县| 邳州市| 博乐市| 田东县| 瑞金市| 搜索| 巫山县| 宜昌市| 巴林左旗| 普洱|