casbin model is stored as embeded file

This commit is contained in:
Justin Hammond 2022-08-16 15:34:32 +08:00
parent 8c076d3878
commit f2650dd8c0
2 changed files with 27 additions and 7 deletions

View file

@ -6,9 +6,11 @@ import (
"context"
"crypto/sha1"
"fmt"
"io/fs"
"net/http"
"os"
// "strings"
// "strings"
dbauth "github.com/Fishwaldo/mouthpiece/internal/auth/db"
telegramauth "github.com/Fishwaldo/mouthpiece/internal/auth/telegram"
@ -23,6 +25,7 @@ import (
"github.com/go-pkgz/auth/token"
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
"github.com/casbin/casbin/v2/util"
//"github.com/casbin/casbin/v2/log"
@ -53,6 +56,7 @@ type AuthConfig struct {
MapClaimsToUser token.ClaimsUpdFunc
Validator token.ValidatorFunc
Host string
ConfigDir fs.FS
}
func init() {
@ -207,25 +211,34 @@ func InitAuth(Config AuthConfig) {
Log.Error(nil, "Telegram auth is enabled but token is not set")
}
}
InitCasbin()
InitCasbin(Config)
Log.Info("Auth service started")
}
func InitCasbin() {
func InitCasbin(config AuthConfig) {
cdb, err := gormadapter.NewAdapterByDB(db.Db)
if err != nil {
Log.Error(err, "Failed to Setup Casbin Auth Adapter")
}
AuthService.AuthEnforcer, err = casbin.NewEnforcer("config/auth_model.conf", cdb)
casbinmodel, err := fs.ReadFile(config.ConfigDir, "config/auth_model.conf")
if err != nil {
Log.Error(err, "Failed to read casbin model")
}
m, err := model.NewModelFromString(string(casbinmodel))
if err != nil {
Log.Error(err, "Failed to parse casbin model")
}
AuthService.AuthEnforcer, err = casbin.NewEnforcer(m, cdb)
if err != nil {
Log.Error(err, "Failed to setup Casbin")
}
AuthService.AuthEnforcer.EnableLog(viper.GetBool("auth.debug"))
AuthService.AuthEnforcer.EnableAutoSave(true)
AuthService.AuthEnforcer.SetRoleManager(defaultrolemanager.NewRoleManager(10))
if err := AuthService.AuthEnforcer.LoadModel(); err != nil {
Log.Error(err, "Failed to load Casbin model")
}
//if err := AuthService.AuthEnforcer.LoadModel(); err != nil {
// Log.Error(err, "Failed to load Casbin model")
//}
if err := AuthService.AuthEnforcer.LoadPolicy(); err != nil {
Log.Error(err, "Failed to Load Casbin Policy")

View file

@ -37,6 +37,7 @@ import (
"encoding/json"
"os"
"runtime/debug"
"embed"
"github.com/Fishwaldo/mouthpiece/frontend"
_ "github.com/Fishwaldo/mouthpiece/frontend"
@ -65,6 +66,11 @@ import (
"github.com/spf13/viper"
)
//go:embed config
var ConfigFiles embed.FS
func init() {
viper.SetDefault("frontend.path", "frontend/dist")
viper.SetDefault("frontend.external", false)
@ -154,6 +160,7 @@ func main() {
humucli.GatewayBasicAuth("basic")
user.AuthConfig.Host = fmt.Sprintf("http://arm64-1.dmz.dynam.ac:%v", viper.Get("Port"))
user.AuthConfig.ConfigDir = ConfigFiles
auth.InitAuth(user.AuthConfig)
m := auth.AuthService.Service.Middleware()
p := middleware.Middleware{}