en, []byte(username))
if err != nil {
panic(fmt.Errorf("failed to store current subject in cache: %w", err))
}
// Send cache key back to client cookie
//c.SetCookie("current_subject", token, 30*60, "/resource", "", false, true)
return token
}
func Register(register *request.Register) {
var err error
e := component.Enforcer
err = e.GetAdapter().(*gormadapter.Adapter).Transaction(e, func(copyEnforcer casbin.IEnforcer) error {
// Insert to table
db := copyEnforcer.GetAdapter().(*gormadapter.Adapter).GetDb()
res := db.Exec("insert into user (username,password) values(?,?)", register.Username, register.Password)
//User has Username and Password
//res := db.Table("user").Create(&User{
// Username: register.Username,
// Password: register.Password,
//})
if err != nil || res.RowsAffected < 1 {
return fmt.Errorf("insert error: %w", err)
}
_, err = copyEnforcer.AddRoleForUser(register.Username, "role::user")
if err != nil {
return fmt.Errorf("add plocy error: %w", err)
}
return nil
})
if err != nil {
panic(err)
}
}
dao.user.go 对数据库的操作
package dao
import "go-web-demo/component"
type User struct {
Id int64 `gorm:"primaryKey"`
Username string
Password string
Email string
Phone string
}
func (u *User) TableName() string {
return "user"
}
func GetByUsername(username string) *User {
res := new(User)
component.DB.Model(&User{}).Where("username = ?", username).First(res)
return res
}
func Insert(username string, password string) (int64, error, int64) {
user := &User{Username: username, Password: password}
res := component.DB.Create(&user)
return user.Id, res.Error, res.RowsAffected
}
最后一步,启动web服务,配置路由
package main
import (
"fmt"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"go-web-demo/component"
"go-web-demo/config"
"go-web-demo/handler"
"go-web-demo/middleware"
"log"
)
var (
router *gin.Engine
)
func init() {
//Initialize components from config yaml: mysql locaCache casbin
component.CreateByConfig()
// Initialize gin engine
router = gin.Default()
// Initialize gin middleware
corsConfig := cors.DefaultConfig()
corsConfig.AllowAllOrigins = true
corsConfig.AllowCredentials = true
router.Use(cors.New(corsConfig))
router.Use(middleware.Recover)
// Initialize gin router
user := router.Group("/user")
{
user.POST("/login", handler.Login)
user.POST("/logout", handler.Logout)
user.POST("/register", handler.Register)
}
resource := router.Group("/api")
{
resource.Use(middleware.DefaultAuthorize("user::resource", "read-write"))
resource.GET("/resource", handler.ReadResource)
resource.POST("/resource", handler.WriteResource)
}
}
func main() {
// Start
port := config.Reader.Server.Port
err := router.Run(":" + port)
if err != nil {
panic(fmt.Sprintf("failed to start gin engine: %v", err))
}
log.Pr