Files
soft_usite/config/auth.go
T
2025-04-24 02:07:47 +00:00

59 lines
1.3 KiB
Go
Executable File

package config
import (
"fmt"
"github.com/casbin/casbin/v2"
gormadapter "github.com/casbin/gorm-adapter/v3"
"github.com/gofiber/fiber/v2"
"gorm.io/gorm"
)
type AuthConfig struct {
*gormadapter.Adapter
Type string `yaml:"type" env:"AUTH_TYPE" env-default:"simple"`
Casbin *Casbin
Enforcer *casbin.Enforcer
}
func (d *AuthConfig) Setup(db *gorm.DB, file string) {
adapter, err := gormadapter.NewAdapterByDB(db)
if err != nil {
panic(fmt.Sprintf("failed to initialize casbin adapter: %v", err))
}
d.Adapter = adapter
enforcer, err := casbin.NewEnforcer(file)
if err != nil {
panic(err)
}
enforcer.SetAdapter(adapter)
err = enforcer.LoadPolicy()
if err != nil {
panic(err)
}
d.Enforcer = enforcer
authConf := CasbinAuthConfig{
Enforcer: d.Enforcer,
PolicyAdapter: d.Adapter,
Lookup: func(ctx *fiber.Ctx) string {
userId := ctx.Locals("user_id")
if userId != nil {
return userId.(string)
}
return ""
},
Unauthorized: func(c *fiber.Ctx) error {
var err fiber.Error
err.Code = fiber.StatusUnauthorized
return CustomErrorHandler(c, &err)
},
Forbidden: func(c *fiber.Ctx) error {
var err fiber.Error
err.Code = fiber.StatusForbidden
return CustomErrorHandler(c, &err)
},
}
d.Casbin = CasbinAuth(authConf)
}