Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang kawalan kebenaran dan kawalan akses rangka kerja Gin

Penjelasan terperinci tentang kawalan kebenaran dan kawalan akses rangka kerja Gin

WBOY
WBOYasal
2023-06-22 13:40:402191semak imbas

Rangka kerja Gin ialah rangka kerja Web ringan yang menggunakan mekanisme coroutine bahasa Go dan algoritma pemadanan penghalaan yang cekap untuk memproses permintaan HTTP dengan pantas. Pada masa yang sama, rangka kerja Gin juga menyediakan mekanisme perisian tengah yang berkuasa yang boleh melaksanakan kawalan kebenaran dan kawalan akses dengan mudah. Artikel ini akan memperkenalkan kawalan kebenaran dan mekanisme kawalan capaian rangka kerja Gin secara terperinci untuk membantu pembangun menguasai fungsi ini dengan lebih baik.

1. Mekanisme perisian tengah rangka kerja Gin

Sebelum memahami kawalan kebenaran dan mekanisme kawalan akses rangka kerja Gin, kita perlu terlebih dahulu memahami mekanisme perisian tengah rangka kerja Gin. Middleware merujuk kepada mekanisme yang pra-proses atau pasca-proses permintaan semasa pemprosesan permintaan. Middleware boleh memintas, menapis, mengubah suai dan operasi lain atas permintaan untuk mencapai pelbagai fungsi. Dalam rangka kerja Gin, middleware menggunakan kaedah pemprosesan yang serupa dengan model onion Pelbagai middleware boleh dipanggil dalam rantai untuk memproses permintaan beberapa kali. Rangka kerja Gin menyediakan dua cara untuk mentakrifkan middleware: middleware global dan middleware tempatan.

Perisian tengah global merujuk kepada perisian tengah yang ditakrifkan sebelum pendaftaran laluan dan boleh memproses semua permintaan. Perisian tengah global boleh ditakrifkan melalui fungsi Use(), contohnya:

router := gin.Default()
router.Use(AuthMiddleware())

Kod ini mentakrifkan perisian pertengahan global AuthMiddleware(), yang akan memproses semua permintaan.

Perisian tengah separa merujuk kepada perisian tengah yang ditakrifkan selepas pendaftaran laluan, yang hanya memproses permintaan tertentu. Perisian tengah tempatan boleh ditakrifkan melalui fungsi Handlers() atau Handle(), contohnya:

router := gin.Default()
router.GET("/users", AuthMiddleware(), ListUsersHandler())

Kod ini mentakrifkan fungsi pemprosesan penghalaan untuk permintaan GET dengan laluan "/users", dan juga menambah Middleware setempat AuthMiddleware(), middleware ini hanya memproses permintaan GET dengan laluan "/users".

2. Kawalan kebenaran rangka kerja Gin

Kawalan kebenaran merujuk kepada mengesahkan identiti pengguna dan menentukan sama ada pengguna mempunyai hak untuk melakukan operasi tertentu berdasarkan identiti pengguna. Rangka kerja Gin boleh melaksanakan kawalan kebenaran melalui mekanisme middleware. Secara umumnya, kawalan kebenaran perlu dikendalikan dalam perisian tengah global untuk memastikan semua permintaan disahkan. Berikut ialah contoh pelaksanaan kawalan kebenaran:

func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        token := c.GetHeader("Authorization")
        if token == "" {
            c.AbortWithStatus(http.StatusUnauthorized)
            return
        }

        // TODO: 对Token进行验证,判断用户是否有权限
        // ...

        c.Next()
    }
}

Perisian tengah ini mula-mula memperoleh medan Kebenaran daripada pengepala permintaan Jika medan itu kosong, ia mengembalikan ralat 401 dan menamatkan pemprosesan permintaan. Kemudian Token disahkan untuk menentukan sama ada pengguna mempunyai kuasa untuk membuat permintaan. Akhir sekali, panggil fungsi c.Next() untuk meneruskan pemprosesan permintaan.

3. Kawalan akses rangka kerja Gin

Kawalan akses merujuk kepada menyekat pengguna dan mengawal akses mereka kepada sumber tertentu. Rangka kerja Gin boleh melaksanakan kawalan capaian melalui mekanisme perisian tengah. Kawalan akses boleh mengambil dua bentuk: senarai putih dan senarai hitam.

Senarai putih bermakna hanya pengguna tertentu sahaja dibenarkan mengakses sumber tertentu dan pengguna lain tidak dibenarkan mengakses. Senarai putih boleh ditakrifkan dalam perisian tengah tempatan untuk memproses permintaan tertentu. Contohnya:

func OnlyAdmin Middleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        user := c.MustGet("user").(*model.User)
        if user.Role != "admin" {
            c.AbortWithStatus(http.StatusForbidden)
            return
        }

        c.Next()
    }
}

router.GET("/admin", OnlyAdmin(), AdminPageHandler())

Kod ini mentakrifkan fungsi pemprosesan penghalaan untuk permintaan GET dengan laluan "/admin", dan juga menambah middleware tempatan OnlyAdmin(). . Jika pengguna lain, kembalikan ralat 403 dan tamatkan pemprosesan permintaan.

Senarai hitam merujuk kepada melarang pengguna tertentu daripada mengakses sumber tertentu, manakala pengguna lain boleh mengaksesnya. Senarai hitam boleh ditakrifkan dalam perisian tengah global untuk memproses semua permintaan. Contohnya:

func BanlistMiddleware() gin.HandlerFunc {
    bannedUsers := []string{"user1", "user2", "user3"}

    return func(c *gin.Context) {
        user := c.MustGet("user").(*model.User)
        if contains(bannedUsers, user.Username) {
            c.AbortWithStatus(http.StatusForbidden)
            return
        }

        c.Next()
    }
}

router.Use(BanlistMiddleware())

Kod ini mentakrifkan perisian pertengahan global BanlistMiddleware(), yang melarang akses oleh pengguna tertentu. Jika pengguna berada dalam senarai larangan, kembalikan ralat 403 dan tamatkan pemprosesan permintaan. Perisian tengah ini ditakrifkan sebelum pendaftaran laluan dan memproses semua permintaan.

4. Ringkasan

Mekanisme perisian tengah rangka kerja Gin sangat berkuasa dan boleh melaksanakan fungsi yang berbeza dengan mudah. Dalam artikel ini, kami mempelajari tentang kawalan kebenaran dan mekanisme kawalan capaian rangka kerja Gin, yang boleh membantu kami melindungi keselamatan aplikasi web dengan lebih baik. Sudah tentu, ini hanya asas kawalan kebenaran dan kawalan akses Dalam aplikasi sebenar, logik dan mekanisme keselamatan yang lebih kompleks diperlukan untuk melindungi keselamatan sistem.

Atas ialah kandungan terperinci Penjelasan terperinci tentang kawalan kebenaran dan kawalan akses rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn