亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言中的訪問(wèn)權(quán)限控制

 更新時(shí)間:2024年08月10日 11:20:50   作者:WBOY  
在?go?中進(jìn)行權(quán)限管理時(shí),推薦使用?grouper、casbin?和?sentry?框架,grouper?適合基于角色的訪問(wèn)控制,casbin?提供高級(jí)?rbac?功能,而?sentry?提供云托管權(quán)限服務(wù)和豐富的功能集,包括多因素認(rèn)證和活動(dòng)審核,這些框架有助于在電子商務(wù)網(wǎng)站等實(shí)際場(chǎng)景中實(shí)施細(xì)粒度的訪問(wèn)控制

在 go 中進(jìn)行權(quán)限管理時(shí),推薦使用 grouper、casbin 和 sentry 框架。grouper 適合基于角色的訪問(wèn)控制,casbin 提供高級(jí) rbac 功能,而 sentry 提供云托管權(quán)限服務(wù)和豐富的功能集,包括多因素認(rèn)證和活動(dòng)審核。這些框架有助于在電子商務(wù)網(wǎng)站等實(shí)際場(chǎng)景中實(shí)施細(xì)粒度的訪問(wèn)控制,例如為用戶授予對(duì)特定產(chǎn)品類別的訪問(wèn)權(quán)限。

Go框架中的權(quán)限管理

權(quán)限管理對(duì)于保護(hù)敏感數(shù)據(jù)和實(shí)現(xiàn)細(xì)粒度的訪問(wèn)控制至關(guān)重要。在 Go 中,有幾個(gè)框架可以簡(jiǎn)化權(quán)限管理任務(wù):

1. Grouper

Grouper 是一個(gè)基于角色的訪問(wèn)控制(RBAC)框架,它允許您輕松創(chuàng)建角色和分配權(quán)限。

import (
    "github.com/grouper/grouper"
)
func main() {
    // 創(chuàng)建一個(gè)角色
    role := grouper.NewRole("admin")
    // 添加權(quán)限
    role.Allow("read", "data")
    role.Allow("write", "data")
    // 創(chuàng)建一個(gè)用戶
    user := grouper.NewUser("john")
    // 分配角色
    user.AddRole(role)
    // 檢查用戶是否有訪問(wèn)權(quán)限
    if user.HasPermission("read", "data") {
        // 授予訪問(wèn)權(quán)限
    } else {
        // 拒絕訪問(wèn)權(quán)限
    }
}

2. Casbin

Casbin 是另一個(gè)流行的 RBAC 框架,具有豐富的功能集,包括多繼承和條件權(quán)限。

import (
    "github.com/casbin/casbin"
)
func main() {
    // 創(chuàng)建一個(gè)執(zhí)行器
    enforcer := casbin.NewEnforcer("model.conf", "policy.csv")
    // 檢查用戶是否有訪問(wèn)權(quán)限
    if enforcer.Enforce("john", "data", "read") {
        // 授予訪問(wèn)權(quán)限
    } else {
        // 拒絕訪問(wèn)權(quán)限
    }
}

3. Sentry

Sentry 是一個(gè)云托管權(quán)限服務(wù),提供高級(jí)權(quán)限管理功能,例如多因素身份驗(yàn)證和活動(dòng)審計(jì)。

import (
    "github.com/getsentry/sentry-go"
)
func main() {
    // 連接到 Sentry
    _ = sentry.Init(sentry.ClientOptions{})
    // 向 Sentry 事件添加用戶上下文
    sentry.CaptureEvent(&sentry.Event{
        User: &sentry.User{
            ID:       "john",
            Username: "john@example.com",
        },
    })
}

案例:Casbin實(shí)現(xiàn)RBAC和功能權(quán)限

1.安裝

go get github.com/casbin/casbin/v2

2.編寫brace_model.conf

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

Model語(yǔ)法

Model CONF 至少應(yīng)包含四個(gè)部分: [request_definition], [policy_definition], [policy_effect], [matchers]。

如果 model 使用 RBAC, 還需要添加[role_definition]部分。

Model CONF 文件可以包含注釋。注釋以 # 開(kāi)頭, # 會(huì)注釋該行剩余部分。

sub, obj, act 表示經(jīng)典三元組: 訪問(wèn)實(shí)體 (Subject),訪問(wèn)資源 (Object) 和訪問(wèn)方法 (Action)。 但是, 你可以自定義你自己的請(qǐng)求表單, 如果不需要指定特定資源,則可以這樣定義 sub、act ,或者如果有兩個(gè)訪問(wèn)實(shí)體, 則為 sub、sub2、obj、act??梢园裺ub當(dāng)作用戶角色, obj為資源對(duì)象(比如api路徑), act當(dāng)作請(qǐng)求行為方法(比如get 和 post等)

3.連接mysql

adapter := xormadapter.NewAdapter("mysql", "root:123456@tcp(127.0.0.1:3306)/demo?charset=utf8mb4", true)
    enforcer := casbin.NewEnforcer("./rbac_models.conf", adapter)
    err := enforcer.LoadPolicy()
    if err != nil {
        logger.RLog.Error("enforcer load policy err", zap.Error(err))
    }

4.添加權(quán)限

if ok := enforcer.AddPolicy(roleName, url, method); !ok {
  log.Fatal("添加權(quán)限失敗")
} else {
  log.Fatal("添加權(quán)限成功")
}

5.刪除權(quán)限

if ok := enforcer.RemovePolicy(roleName, url, method); !ok {
  log.Fatal("刪除權(quán)限失敗")
} else {
  log.Fatal("刪除權(quán)限成功")
}

6.中間件校驗(yàn)權(quán)限

func CheckPermission() echo.MiddlewareFunc {
    return func(handlerFunc echo.HandlerFunc) echo.HandlerFunc {
        return func(c echo.Context) error {
            obj := c.Request().URL.RequestURI()
            act := c.Request().Method
            sub := "admin"

            if ok := _casbin.Enforcer.Enforce(sub, obj, act); !ok {
                return c.JSON(http.StatusOK, _auth.PermissionInterception)
            }
            return handlerFunc(c)
        }
    }
}

7.路由引入中間件

總結(jié)

到此這篇關(guān)于Go語(yǔ)言中的訪問(wèn)權(quán)限控制的文章就介紹到這了,更多相關(guān)Go框架中的權(quán)限管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口

    Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以了解下
    2024-02-02
  • 一文帶你掌握Go語(yǔ)言I/O操作中的io.Reader和io.Writer

    一文帶你掌握Go語(yǔ)言I/O操作中的io.Reader和io.Writer

    在?Go?語(yǔ)言中,io.Reader?和?io.Writer?是兩個(gè)非常重要的接口,它們?cè)谠S多標(biāo)準(zhǔn)庫(kù)中都扮演著關(guān)鍵角色,下面就跟隨小編一起學(xué)習(xí)一下它們的使用吧
    2025-01-01
  • 一文帶你使用Golang實(shí)現(xiàn)SSH客戶端

    一文帶你使用Golang實(shí)現(xiàn)SSH客戶端

    SSH?全稱為?Secure?Shell,是一種用于安全地遠(yuǎn)程登錄到網(wǎng)絡(luò)上的其他計(jì)算機(jī)的網(wǎng)絡(luò)協(xié)議,本文主要為大家詳細(xì)介紹了如何使用?Golang?實(shí)現(xiàn)?SSH?客戶端,需要的可以參考下
    2023-11-11
  • Golang常量iota的使用實(shí)例

    Golang常量iota的使用實(shí)例

    今天小編就為大家分享一篇關(guān)于Golang常量iota的使用實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Go?Ticker?周期性定時(shí)器用法及實(shí)現(xiàn)原理詳解

    Go?Ticker?周期性定時(shí)器用法及實(shí)現(xiàn)原理詳解

    這篇文章主要為大家介紹了Go?Ticker?周期性定時(shí)器用法及實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang多線程下載器實(shí)現(xiàn)高效快速地下載大文件

    Golang多線程下載器實(shí)現(xiàn)高效快速地下載大文件

    Golang多線程下載器是一種高效、快速地下載大文件的方法。Golang語(yǔ)言天生支持并發(fā)和多線程,可以輕松實(shí)現(xiàn)多線程下載器的開(kāi)發(fā)。通過(guò)使用Golang的協(xié)程和通道,可以將下載任務(wù)分配到多個(gè)線程中并行處理,提高了下載的效率和速度
    2023-05-05
  • Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    本文主要介紹了Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Golang中ringbuffer的實(shí)現(xiàn)與應(yīng)用場(chǎng)景詳解

    Golang中ringbuffer的實(shí)現(xiàn)與應(yīng)用場(chǎng)景詳解

    ringbuffer因?yàn)樗軓?fù)用緩沖空間,通常用于網(wǎng)絡(luò)通信連接的讀寫,雖然市面上已經(jīng)有了go寫的諸多版本的ringbuffer組件,但還是自己造一個(gè)吧
    2023-06-06
  • Golang交叉編譯之跨平臺(tái)編譯使用詳解

    Golang交叉編譯之跨平臺(tái)編譯使用詳解

    這篇文章主要為大家介紹了Golang交叉編譯之跨平臺(tái)編譯使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Go項(xiàng)目開(kāi)發(fā)中如何讀取應(yīng)用配置詳解

    Go項(xiàng)目開(kāi)發(fā)中如何讀取應(yīng)用配置詳解

    本文主要介紹了Go項(xiàng)目開(kāi)發(fā)中如何讀取應(yīng)用配置詳解,Go生態(tài)中有很多包可以加載并解析配置,最受歡迎的是Viper包,下面就來(lái)詳細(xì)的介紹一下
    2024-05-05

最新評(píng)論