发布时间:2024-12-28 02:03:36
在Golang中,我们可以使用令牌(Token)和路由(Router)实现基于角色的用户权限管理。
首先,我们需要在应用程序中集成JWT库,例如github.com/dgrijalva/jwt-go。通过这个库,我们可以轻松地实现JWT的生成和验证。
以下是一个示例Golang中使用Gin框架实现的基本权限控制中间件的代码:
```go func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // 解析令牌 tokenString := c.GetHeader("Authorization") token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("SECRET_KEY"), nil }) if err != nil || !token.Valid { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"}) c.Abort() return } // 检查权限 role := token.Claims.(jwt.MapClaims)["role"].(string) if role != "admin" { c.JSON(http.StatusForbidden, gin.H{"error": "Insufficient privileges"}) c.Abort() return } // 继续执行下一个handler c.Next() } } ``` 在这个示例中,我们首先解析令牌,然后检查角色是否为管理员。如果用户没有管理员权限,我们会返回一个HTTP 403错误,并中断请求执行。以下是一个示例Golang中使用Gorm库创建角色和权限表的代码:
```go type Role struct { gorm.Model Name string `gorm:"unique;not null"` } type Permission struct { gorm.Model Name string `gorm:"unique;not null"` } func Migrate() { db, _ := gorm.Open("sqlite3", "database.db") db.AutoMigrate(&Role{}) db.AutoMigrate(&Permission{}) } ```以下是一个示例Golang中使用Gorm库进行角色和权限管理的代码:
```go func CreateRole(roleName string) error { db, _ := gorm.Open("sqlite3", "database.db") role := Role{Name: roleName} err := db.Create(&role).Error return err } func CreatePermission(permissionName string) error { db, _ := gorm.Open("sqlite3", "database.db") permission := Permission{Name: permissionName} err := db.Create(&permission).Error return err } func AssignRole(userID uint, roleID uint) error { db, _ := gorm.Open("sqlite3", "database.db") user := User{} role := Role{} db.First(&user, userID) db.First(&role, roleID) err := db.Model(&user).Association("Roles").Append(role).Error return err } func AssignPermission(roleID uint, permissionID uint) error { db, _ := gorm.Open("sqlite3", "database.db") role := Role{} permission := Permission{} db.First(&role, roleID) db.First(&permission, permissionID) err := db.Model(&role).Association("Permissions").Append(permission).Error return err } ``` 通过上述代码,我们可以创建角色和权限,将角色分配给用户,并为角色分配特定的权限。