diff --git a/oa/api/app/app.go b/oa/api/app/app.go index 6bcc6d7..45a9ea6 100644 --- a/oa/api/app/app.go +++ b/oa/api/app/app.go @@ -1,19 +1,21 @@ package app import ( - "github.com/google/uuid" - "github.com/veypi/OneBD/rest" "oa/cfg" + "oa/libs/auth" M "oa/models" "strings" + + "github.com/google/uuid" + "github.com/veypi/OneBD/rest" ) func useApp(r rest.Router) { - r.Delete("/:app_id", appDelete) - r.Get("/:app_id", appGet) - r.Get("/", appList) - r.Patch("/:app_id", appPatch) - r.Post("/", appPost) + r.Delete("/:app_id", auth.Check("app", "app_id", auth.DoDelete), appDelete) + r.Get("/:app_id", auth.Check("app", "app_id", auth.DoRead), appGet) + r.Get("/", auth.Check("app", "", auth.DoRead), appList) + r.Patch("/:app_id", auth.Check("app", "app_id", auth.DoUpdate), appPatch) + r.Post("/", auth.Check("app", "", auth.DoCreate), appPost) } func appDelete(x *rest.X) (any, error) { opts := &M.AppDelete{} @@ -45,13 +47,24 @@ func appList(x *rest.X) (any, error) { if err != nil { return nil, err } - data := make([]*M.App, 0, 10) + data := make([]*struct { + M.App + UserStatus string `json:"user_status"` + }, 0, 10) - query := cfg.DB() + query := cfg.DB().Debug().Table("apps").Select("apps.*,app_users.status user_status") + uid := x.Request.Context().Value("uid").(string) if opts.Name != nil { - query = query.Where("name LIKE ?", opts.Name) + query = query.Joins("LEFT JOIN app_users ON app_users.app_id = apps.id AND app_users.user_id = ? AND apps.name LIKE ?", uid, opts.Name) + } else { + query = query.Joins("LEFT JOIN app_users ON app_users.app_id = apps.id AND app_users.user_id = ?", uid) } - err = query.Find(&data).Error + + // logv.AssertError(cfg.DB().Table("accesses a"). + // Select("a.name, a.t_id, a.level"). + // Joins("INNER JOIN user_roles ur ON ur.role_id = a.role_id AND ur.user_id = ?", refresh.UID). + // Scan(&acList).Error) + err = query.Scan(&data).Error return data, err } @@ -77,8 +90,8 @@ func appPatch(x *rest.X) (any, error) { if opts.Des != nil { optsMap["des"] = opts.Des } - if opts.Participate != nil { - optsMap["participate"] = opts.Participate + if opts.Typ != nil { + optsMap["typ"] = opts.Typ } if opts.InitRoleID != nil { optsMap["init_role_id"] = opts.InitRoleID @@ -99,7 +112,7 @@ func appPost(x *rest.X) (any, error) { data.Name = opts.Name data.Icon = opts.Icon data.Des = opts.Des - data.Participate = opts.Participate + data.Typ = opts.Typ err = cfg.DB().Create(data).Error return data, err diff --git a/oa/api/init.go b/oa/api/init.go index ed2c1c3..79e2947 100644 --- a/oa/api/init.go +++ b/oa/api/init.go @@ -24,11 +24,11 @@ func Use(r rest.Router) { role.Use(r.SubRouter("role")) user.Use(r.SubRouter("user")) token.Use(r.SubRouter("token")) - r.Get("", baseInfo) + r.Get("", baseInfo) } func baseInfo(x *rest.X) (any, error) { - return map[string]any{ - "id": cfg.Config.ID, - }, nil + return map[string]any{ + "id": cfg.Config.ID, + }, nil } diff --git a/oa/api/user/user.go b/oa/api/user/user.go index d55b4b3..3657c2e 100644 --- a/oa/api/user/user.go +++ b/oa/api/user/user.go @@ -151,8 +151,14 @@ func userPost(x *rest.X) (any, error) { return err } status := "ok" - if app.Participate != "auto" { + switch app.Typ { + case "private": + return errs.AuthNoPerm.WithStr("not enable register") + case "apply": status = "applying" + case "public": + } + if app.Typ != "public" { } return tx.Create(&M.AppUser{ diff --git a/oa/builtin/init.go b/oa/builtin/init.go index 3e70812..bd5cd53 100644 --- a/oa/builtin/init.go +++ b/oa/builtin/init.go @@ -21,7 +21,7 @@ import ( func Enable(app *rest.Application) { if cfg.Config.FsPath != "" { r := app.Router().SubRouter("fs") - r.Any("/app/*", fs.NewAppFs("/fs/app")) + r.Any("/a/*", fs.NewAppFs("/fs/a")) r.Any("/u/*", fs.NewUserFs("/fs/u")) } tsPorxy := httputil.NewSingleHostReverseProxy(logv.AssertFuncErr(url.Parse("http://v.v:8428"))) diff --git a/oa/cfg/db.go b/oa/cfg/db.go index 5991f2c..4ce3886 100644 --- a/oa/cfg/db.go +++ b/oa/cfg/db.go @@ -8,7 +8,7 @@ package cfg import ( - "gorm.io/driver/mysql" + "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) @@ -39,9 +39,12 @@ func init() { func DB() *gorm.DB { if db == nil { var err error - db, err = gorm.Open(mysql.New(mysql.Config{ - DSN: Config.DSN, - }), &gorm.Config{ + // db, err = gorm.Open(mysql.New(mysql.Config{ + // DSN: Config.DSN, + // }), &gorm.Config{ + // Logger: logger.Default.LogMode(logger.Silent), + // }) + db, err = gorm.Open(postgres.Open(Config.DSN), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { diff --git a/oa/go.mod b/oa/go.mod index 6314eab..7fb65cd 100644 --- a/oa/go.mod +++ b/oa/go.mod @@ -13,21 +13,28 @@ require ( github.com/nats-io/nats-server/v2 v2.10.21 github.com/veypi/OneBD v0.0.0-00010101000000-000000000000 github.com/veypi/utils v0.3.7 - gorm.io/driver/mysql v1.5.7 + gorm.io/driver/postgres v1.5.9 gorm.io/gorm v1.25.12 ) require ( + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.5.5 // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/kr/text v0.2.0 // indirect github.com/minio/highwayhash v1.0.3 // indirect github.com/nats-io/jwt/v2 v2.5.8 // indirect github.com/nats-io/nkeys v0.4.7 // indirect github.com/nats-io/nuid v1.0.1 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/zerolog v1.17.2 // indirect golang.org/x/crypto v0.27.0 // indirect golang.org/x/net v0.21.0 // indirect + golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.25.0 // indirect golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.6.0 // indirect diff --git a/oa/go.sum b/oa/go.sum index 1c0be1a..1639bfb 100644 --- a/oa/go.sum +++ b/oa/go.sum @@ -1,18 +1,34 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/nats-io/jwt/v2 v2.5.8 h1:uvdSzwWiEGWGXf+0Q+70qv6AQdvcvxrv9hPM0RiPamE= @@ -26,9 +42,18 @@ github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDm github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.17.2 h1:RMRHFw2+wF7LO0QqtELQwo8hqSmqISyCJeFeAAuWcRo= github.com/rs/zerolog v1.17.2/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= @@ -37,6 +62,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= @@ -48,16 +75,17 @@ golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= -gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= -gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8= +gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= diff --git a/oa/libs/auth/jwt.go b/oa/libs/auth/jwt.go index 4ca2567..32fbc80 100644 --- a/oa/libs/auth/jwt.go +++ b/oa/libs/auth/jwt.go @@ -67,7 +67,7 @@ func CheckJWT(x *rest.X) (*Claims, error) { return nil, err } - x.Request = x.Request.WithContext(context.WithValue(x.Request.Context(), "uid", claims.ID)) + x.Request = x.Request.WithContext(context.WithValue(x.Request.Context(), "uid", claims.UID)) return claims, nil } diff --git a/oa/models/app.gen.go b/oa/models/app.gen.go index 657f14b..5da2484 100644 --- a/oa/models/app.gen.go +++ b/oa/models/app.gen.go @@ -7,12 +7,13 @@ type AppGet struct { } type AppPatch struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@app_id"` - Name *string `json:"name" parse:"json"` - Icon *string `json:"icon" parse:"json"` - Des *string `json:"des" parse:"json"` - Participate *string `json:"participate" gorm:"default:auto" parse:"json"` - InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32)" parse:"json"` + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@app_id"` + Name *string `json:"name" parse:"json"` + Icon *string `json:"icon" parse:"json"` + Des *string `json:"des" parse:"json"` + Typ *string `json:"typ" gorm:"default:auto" parse:"json"` + InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32)" parse:"json"` + Status *string `json:"status" gorm:"default:ok" parse:"json"` } type AppDelete struct { @@ -20,10 +21,11 @@ type AppDelete struct { } type AppPost struct { - Name string `json:"name" parse:"json"` - Icon string `json:"icon" parse:"json"` - Des string `json:"des" parse:"json"` - Participate string `json:"participate" gorm:"default:auto" parse:"json"` + Name string `json:"name" parse:"json"` + Icon string `json:"icon" parse:"json"` + Des string `json:"des" parse:"json"` + Typ string `json:"typ" gorm:"default:auto" parse:"json"` + Status string `json:"status" gorm:"default:ok" parse:"json"` } type AppList struct { diff --git a/oa/models/app.go b/oa/models/app.go index c29e303..8fecf97 100644 --- a/oa/models/app.go +++ b/oa/models/app.go @@ -7,15 +7,16 @@ import ( type App struct { BaseModel - Name string `json:"name" methods:"post,*patch,*list" parse:"json"` - Icon string `json:"icon" methods:"post,*patch" parse:"json"` - Des string `json:"des" methods:"post,*patch" parse:"json"` - Participate string `json:"participate" gorm:"default:auto" methods:"post,*patch" parse:"json"` - InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32);default: null" methods:"*patch" parse:"json"` - InitRole *Role `json:"init_role" gorm:"foreignKey:InitRoleID;references:ID"` - InitUrl string `json:"init_url"` - UserCount uint `json:"user_count"` - Key string `json:"-"` + Name string `json:"name" methods:"post,*patch,*list" parse:"json"` + Icon string `json:"icon" methods:"post,*patch" parse:"json"` + Des string `json:"des" methods:"post,*patch" parse:"json"` + Typ string `json:"typ" gorm:"default:public" methods:"post,*patch" parse:"json"` + Status string `json:"status" gorm:"default:ok" methods:"post,*patch" parse:"json"` + InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32);default: null" methods:"*patch" parse:"json"` + InitRole *Role `json:"init_role" gorm:"foreignKey:InitRoleID;references:ID"` + InitUrl string `json:"init_url"` + UserCount uint `json:"user_count"` + Key string `json:"-"` } type AppUser struct { @@ -34,7 +35,7 @@ func (m *AppUser) onOk(tx *gorm.DB) (err error) { logv.AssertError(tx.Where("id = ?", m.AppID).First(app).Error) if app.InitRoleID != nil { urList := make([]*UserRole, 0, 2) - logv.AssertError(tx.Where("app_id = ? && user_id = ?", m.AppID, m.UserID).Find(&urList).Error) + logv.AssertError(tx.Debug().Where("app_id = ? AND user_id = ?", m.AppID, m.UserID).Find(&urList).Error) if len(urList) == 0 { return tx.Create(&UserRole{ AppID: m.AppID,