Initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user