Maison > Article > développement back-end > Explication détaillée du contrôle des autorisations et du contrôle d'accès du framework Gin
Le framework Gin est un framework Web léger qui utilise le mécanisme de coroutine du langage Go et un algorithme de correspondance de routage efficace pour traiter rapidement les requêtes HTTP. Dans le même temps, le framework Gin fournit également un puissant mécanisme middleware qui peut facilement mettre en œuvre le contrôle des autorisations et le contrôle d'accès. Cet article présentera en détail le mécanisme de contrôle des autorisations et de contrôle d'accès du framework Gin pour aider les développeurs à mieux maîtriser cette fonction.
1. Le mécanisme middleware du framework Gin
Avant de comprendre les mécanismes de contrôle d'autorisation et de contrôle d'accès du framework Gin, nous devons d'abord comprendre le mécanisme middleware du framework Gin. Le middleware fait référence à un mécanisme qui pré-traite ou post-traite les demandes pendant le traitement des demandes. Le middleware peut intercepter, filtrer, modifier et autres opérations sur requêtes pour réaliser diverses fonctions. Dans le framework Gin, le middleware adopte une méthode de traitement similaire au modèle onion. Plusieurs middlewares peuvent être appelés dans une chaîne pour traiter les demandes plusieurs fois. Le framework Gin propose deux manières de définir le middleware : le middleware global et le middleware local.
Le middleware global fait référence au middleware défini avant l'enregistrement de la route et peut traiter toutes les demandes. Le middleware global peut être défini via la fonction Use(), par exemple :
router := gin.Default() router.Use(AuthMiddleware())
Ce code définit un middleware global AuthMiddleware(), qui traitera toutes les requêtes.
Le middleware partiel fait référence au middleware défini après l'enregistrement de la route, qui ne traite qu'une requête spécifique. Le middleware local peut être défini via la fonction Handlers() ou Handle(), par exemple :
router := gin.Default() router.GET("/users", AuthMiddleware(), ListUsersHandler())
Ce code définit une fonction de traitement de routage pour les requêtes GET avec le chemin "/users", et ajoute également un middleware local AuthMiddleware( ), ce middleware traite uniquement les requêtes GET avec le chemin "/users".
2. Contrôle des autorisations du framework Gin
Le contrôle des autorisations fait référence à l'authentification de l'identité de l'utilisateur et à la détermination si l'utilisateur a le droit d'effectuer une certaine opération en fonction de son identité. Le framework Gin peut implémenter le contrôle des autorisations via le mécanisme middleware. De manière générale, le contrôle des autorisations doit être géré dans un middleware global pour garantir que toutes les demandes sont authentifiées. Voici un exemple d'implémentation du contrôle des autorisations :
func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { token := c.GetHeader("Authorization") if token == "" { c.AbortWithStatus(http.StatusUnauthorized) return } // TODO: 对Token进行验证,判断用户是否有权限 // ... c.Next() } }
Ce middleware récupère d'abord le champ Autorisation de l'en-tête de la requête. Si le champ est vide, il renvoie une erreur 401 et met fin au traitement de la requête. Ensuite, le jeton est vérifié pour déterminer si l'utilisateur a le pouvoir de faire la demande. Enfin, appelez la fonction c.Next() pour continuer le traitement de la requête.
3. Contrôle d'accès du framework Gin
Le contrôle d'accès fait référence à la restriction des utilisateurs et au contrôle de leur accès à une certaine ressource. Le framework Gin peut implémenter le contrôle d'accès via des mécanismes middleware. Le contrôle d'accès peut prendre deux formes : liste blanche et liste noire.
La liste blanche signifie que seuls certains utilisateurs sont autorisés à accéder à certaines ressources et que d'autres utilisateurs ne sont pas autorisés à y accéder. Une liste blanche peut être définie dans le middleware local pour traiter une demande spécifique. Par exemple :
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())
Ce code définit une fonction de traitement de routage pour les requêtes GET avec le chemin "/admin", et ajoute également un middleware local OnlyAdmin(), qui autorise uniquement l'accès aux utilisateurs ayant des rôles d'administrateur. S'il s'agit d'un autre utilisateur, renvoyez une erreur 403 et terminez le traitement de la demande.
La liste noire fait référence à l'interdiction à certains utilisateurs d'accéder à certaines ressources, tandis que d'autres utilisateurs peuvent y accéder. La liste noire peut être définie dans le middleware global pour traiter toutes les requêtes. Par exemple :
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())
Ce code définit un middleware global BanlistMiddleware(), qui interdit l'accès à certains utilisateurs. Si l'utilisateur figure sur la liste des bannis, renvoyez une erreur 403 et mettez fin au traitement de la demande. Ce middleware est défini avant l'enregistrement de la route et traite toutes les demandes.
4. Résumé
Le mécanisme middleware du framework Gin est très puissant et peut facilement implémenter différentes fonctions. Dans cet article, nous avons découvert les mécanismes de contrôle d'autorisation et de contrôle d'accès du framework Gin, qui peuvent nous aider à mieux protéger la sécurité des applications Web. Bien entendu, il ne s’agit que de la base du contrôle des autorisations et du contrôle d’accès. Dans les applications réelles, des mécanismes de logique et de sécurité plus complexes sont nécessaires pour protéger la sécurité du système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!