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

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

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

導語

學習一下golang權限控制,保留一下demo代碼作為參考

Casbin是什么

Casbin是一個強大的、高效的開源訪問控制框架,其權限管理機制支持多種訪問控制模型,Casbin只負責訪問控制。

其功能有:

  • 支持自定義請求的格式,默認的請求格式為{subject, object, action}。
  • 具有訪問控制模型model和策略policy兩個核心概念。
  • 支持RBAC中的多層角色繼承,不止主體可以有角色,資源也可以具有角色。
  • 支持內置的超級用戶 例如:rootadministrator。超級用戶可以執(zhí)行任何操作而無需顯式的權限聲明。
  • 支持多種內置的操作符,如 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() 去批量處理一些請求。
	// 這個方法返回一個布爾類型的切片,切片的下標對應二位數(shù)組的行標
	// 例如 results[0] 是 {"alice", "data1", "read"} 的結果
	//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() 去批量處理一些請求。
	// 這個方法返回一個布爾類型的切片,切片的下標對應二位數(shù)組的行標
	// 例如 results[0] 是 {"alice", "data1", "read"} 的結果
	//results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
}

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

相關文章

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

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

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

    golang中的nil接收器詳解

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

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

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

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

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

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

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

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

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

    Go設計模式之生成器模式詳細講解

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

    golang?gorm的Callbacks事務回滾對象操作示例

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

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

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

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

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

最新評論

拜泉县| 年辖:市辖区| 桐庐县| 玛多县| 繁峙县| 房产| 湟源县| 尉犁县| 巴南区| 新昌县| 奇台县| 镇赉县| 绥宁县| 广平县| 富锦市| 师宗县| 新巴尔虎左旗| 景洪市| 扬州市| 石台县| 高淳县| 崇阳县| 漳浦县| 濮阳市| 乌拉特前旗| 乐平市| 万安县| 蓝山县| 绥棱县| 澄江县| 遂昌县| 津南区| 安丘市| 苍南县| 西和县| 海原县| 琼海市| 鹿泉市| 寻乌县| 湟中县| 通榆县|