diff --git a/oa/api/access/access.go b/oa/api/access/access.go index 9835f0a..39e6a24 100644 --- a/oa/api/access/access.go +++ b/oa/api/access/access.go @@ -72,32 +72,38 @@ func accessGet(x *rest.X) (any, error) { return data, err } -func accessPatch(x *rest.X) (any, error) { - opts := &M.AccessPatch{} +func accessDelete(x *rest.X) (any, error) { + opts := &M.AccessDelete{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Access{} - err = cfg.DB().Where("id = ?", opts.ID).First(data).Error - if err != nil { - return nil, err - } - optsMap := make(map[string]interface{}) - err = cfg.DB().Model(data).Updates(optsMap).Error + err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error return data, err } -func accessDelete(x *rest.X) (any, error) { - opts := &M.AccessDelete{} +func accessPatch(x *rest.X) (any, error) { + opts := &M.AccessPatch{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Access{} - err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error + err = cfg.DB().Where("id = ?", opts.ID).First(data).Error + if err != nil { + return nil, err + } + optsMap := make(map[string]interface{}) + if opts.TID != nil { + optsMap["tid"] = opts.TID + } + if opts.Level != nil { + optsMap["level"] = opts.Level + } + err = cfg.DB().Model(data).Updates(optsMap).Error return data, err } diff --git a/oa/api/user/user_role.go b/oa/api/user/user_role.go index 17a8f8b..88affdd 100644 --- a/oa/api/user/user_role.go +++ b/oa/api/user/user_role.go @@ -1,11 +1,9 @@ package user import ( - "github.com/google/uuid" "github.com/veypi/OneBD/rest" "oa/cfg" M "oa/models" - "strings" ) func useUserRole(r rest.Router) { @@ -15,43 +13,65 @@ func useUserRole(r rest.Router) { r.Patch("/:user_role_id", userRolePatch) r.Post("/", userRolePost) } -func userRoleDelete(x *rest.X) (any, error) { - opts := &M.UserRoleDelete{} +func userRoleList(x *rest.X) (any, error) { + opts := &M.UserRoleList{} err := x.Parse(opts) if err != nil { return nil, err } - data := &M.UserRole{} + data := make([]*struct { + M.UserRole + Username string `json:"username"` + Nickname string `json:"nickname"` + Icon string `json:"icon"` + RoleName string `json:"role_name"` + }, 0, 10) + // data := make([]*M.UserRole, 0, 10) - err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error + query := cfg.DB().Debug().Table("user_roles").Select("user_roles.*,users.username,users.nickname,users.icon,roles.name as role_name"). + Joins("JOIN users ON users.id = user_roles.user_id"). + Joins("JOIN roles ON roles.id = user_roles.role_id") + if opts.UserID != nil && *opts.UserID != "-" { + query = query.Where("user_id LIKE ?", opts.UserID) + } + if opts.RoleID != nil { + query = query.Where("role_id LIKE ?", opts.RoleID) + } + if opts.AppID != nil { + query = query.Where("app_id LIKE ?", opts.AppID) + } + if opts.Status != nil { + query = query.Where("status LIKE ?", opts.Status) + } + err = query.Scan(&data).Error return data, err } -func userRoleGet(x *rest.X) (any, error) { - opts := &M.UserRoleGet{} +func userRolePost(x *rest.X) (any, error) { + opts := &M.UserRolePost{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} - err = cfg.DB().Where("id = ?", opts.ID).First(data).Error + data.UserID = opts.UserID + data.RoleID = opts.RoleID + data.AppID = opts.AppID + data.Status = opts.Status + err = cfg.DB().Create(data).Error return data, err } -func userRoleList(x *rest.X) (any, error) { - opts := &M.UserRoleList{} +func userRoleGet(x *rest.X) (any, error) { + opts := &M.UserRoleGet{} err := x.Parse(opts) if err != nil { return nil, err } - data := make([]*M.UserRole, 0, 10) + data := &M.UserRole{} - query := cfg.DB() - if opts.Status != nil { - query = query.Where("status LIKE ?", opts.Status) - } - err = query.Find(&data).Error + err = cfg.DB().Where("id = ?", opts.ID).First(data).Error return data, err } @@ -75,19 +95,15 @@ func userRolePatch(x *rest.X) (any, error) { return data, err } -func userRolePost(x *rest.X) (any, error) { - opts := &M.UserRolePost{} +func userRoleDelete(x *rest.X) (any, error) { + opts := &M.UserRoleDelete{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} - data.ID = strings.ReplaceAll(uuid.New().String(), "-", "") - data.UserID = opts.UserID - data.RoleID = opts.RoleID - data.Status = opts.Status - err = cfg.DB().Create(data).Error + err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error return data, err } diff --git a/oa/models/access.gen.go b/oa/models/access.gen.go index ce11b2f..52c7fa3 100644 --- a/oa/models/access.gen.go +++ b/oa/models/access.gen.go @@ -27,7 +27,9 @@ type AccessGet struct { } type AccessPatch struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@access_id"` + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@access_id"` + TID *string `json:"tid" parse:"json"` + Level *uint `json:"level" parse:"json"` } type AccessDelete struct { diff --git a/oa/models/access.go b/oa/models/access.go index 0d473d9..6e7b3a3 100644 --- a/oa/models/access.go +++ b/oa/models/access.go @@ -23,6 +23,6 @@ type Access struct { Name string `json:"name" methods:"post,*list" parse:"json"` - TID string `json:"tid" methods:"post" parse:"json"` - Level uint `json:"level" methods:"post" parse:"json"` + TID string `json:"tid" methods:"post,*patch" parse:"json"` + Level uint `json:"level" methods:"post,*patch" parse:"json"` } diff --git a/oa/models/user.gen.go b/oa/models/user.gen.go index b614369..4193329 100644 --- a/oa/models/user.gen.go +++ b/oa/models/user.gen.go @@ -39,31 +39,28 @@ type UserList struct { } type UserRoleGet struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@user_role_id"` - UserID string `json:"user_id" parse:"path"` + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@user_role_id"` } type UserRolePatch struct { ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@user_role_id"` Status *string `json:"status" parse:"json"` - UserID string `json:"user_id" parse:"path"` } type UserRoleDelete struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@user_role_id"` - UserID string `json:"user_id" parse:"path"` - RoleID string `json:"role_id" parse:"json"` - AppID string `json:"app_id" parse:"json"` + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@user_role_id"` +} + +type UserRoleList struct { + UserID *string `json:"user_id" parse:"path"` + RoleID *string `json:"role_id" parse:"query"` + AppID *string `json:"app_id" parse:"query"` + Status *string `json:"status" parse:"query"` } type UserRolePost struct { - Status string `json:"status" parse:"json"` + UserID string `json:"user_id" parse:"path"` RoleID string `json:"role_id" parse:"json"` AppID string `json:"app_id" parse:"json"` - UserID string `json:"user_id" parse:"path"` -} - -type UserRoleList struct { - UserID string `json:"user_id" parse:"path"` - Status *string `json:"status" parse:"query"` + Status string `json:"status" parse:"json"` } diff --git a/oa/models/user.go b/oa/models/user.go index 0b2357c..6e8029b 100644 --- a/oa/models/user.go +++ b/oa/models/user.go @@ -24,13 +24,13 @@ type User struct { type UserRole struct { BaseModel - UserID string `json:"user_id" methods:"get,list,post,patch,delete" parse:"path"` + UserID string `json:"user_id" methods:"*list,post" parse:"path"` User *User `json:"-" gorm:"foreignKey:UserID;references:ID"` - RoleID string `json:"role_id" methods:"post,delete" parse:"json"` + RoleID string `json:"role_id" methods:"*list,post" parse:"json"` Role *Role `json:"-" gorm:"foreignKey:RoleID;references:ID"` - AppID string `json:"app_id" methods:"post,delete" parse:"json"` + AppID string `json:"app_id" methods:"*list,post" parse:"json"` App *App `json:"-" gorm:"foreignKey:AppID;references:ID"` Status string `json:"status" methods:"post,*patch,*list" parse:"json"` diff --git a/oaer/index.d.ts b/oaer/index.d.ts index 20baf77..2383b34 100644 --- a/oaer/index.d.ts +++ b/oaer/index.d.ts @@ -1,3 +1,3 @@ -export default interface OAER { +export default { logout() } diff --git a/oaer/lib/components/fstree.ts b/oaer/lib/components/fstree.ts index f1064c4..c5bdf65 100644 --- a/oaer/lib/components/fstree.ts +++ b/oaer/lib/components/fstree.ts @@ -35,7 +35,7 @@ const dirTree = (root: string | FileStat, depth = 0): HTMLElement => { style: `padding-left: ${depth * 1 + 1}rem`, children: [v('div', '🔤'), v('div', item.basename)], onclick: () => { - api.token.Post({ refresh: logic.token.refresh.raw(), typ: 'ufs' }).then(e => { + api.token.Post({ refresh: logic.token.refresh.raw(), typ: 'ufs' }).then(() => { logic.goto(fs.user.urlwrap(item.filename), undefined, true) }) diff --git a/oaer/lib/fs.ts b/oaer/lib/fs.ts index 81850c5..1b1ee90 100644 --- a/oaer/lib/fs.ts +++ b/oaer/lib/fs.ts @@ -133,42 +133,42 @@ const rename = (o: string, n?: string) => { // }) // } -const get_dav = (client: webdav.WebDAVClient, base_url: string) => { - return { - client: client, - stat: client.stat, - dir: client.getDirectoryContents, - uploadstr: (dir: string, name: string, data: string) => { - if (dir.startsWith('/')) { - dir = dir.slice(1) - } - return new Promise((resolve, reject) => { - let temp = () => { - let reader = new FileReader() - reader.onload = function (event) { - var res = event.target?.result - // let data = new Blob([res]) - client.putFileContents(dir + name, res).then(e => { - if (e) { - resolve(base_url + dir + name) - } - }).catch(reject) - } - reader.readAsArrayBuffer(new Blob([data], { type: 'plain/text' })) - } - client.stat(dir).then(() => { - temp() - }).catch((_) => { - client.createDirectory(dir, { recursive: true }).then(() => { - temp() - }).catch(e => { - console.warn(e) - }) - }) - }); - } - } -} +// const get_dav = (client: webdav.WebDAVClient, base_url: string) => { +// return { +// client: client, +// stat: client.stat, +// dir: client.getDirectoryContents, +// uploadstr: (dir: string, name: string, data: string) => { +// if (dir.startsWith('/')) { +// dir = dir.slice(1) +// } +// return new Promise((resolve, reject) => { +// let temp = () => { +// let reader = new FileReader() +// reader.onload = function (event) { +// var res = event.target?.result +// // let data = new Blob([res]) +// client.putFileContents(dir + name, res).then(e => { +// if (e) { +// resolve(base_url + dir + name) +// } +// }).catch(reject) +// } +// reader.readAsArrayBuffer(new Blob([data], { type: 'plain/text' })) +// } +// client.stat(dir).then(() => { +// temp() +// }).catch((_) => { +// client.createDirectory(dir, { recursive: true }).then(() => { +// temp() +// }).catch(e => { +// console.warn(e) +// }) +// }) +// }); +// } +// } +// } const download = (url: string) => { return new Promise((resolve, reject) => { diff --git a/oaer/src/main.ts b/oaer/src/main.ts index 119c566..04dc0d2 100644 --- a/oaer/src/main.ts +++ b/oaer/src/main.ts @@ -4,8 +4,6 @@ import './style.css' // let a = proxy.Ref(1) // a.value++ import oaer from '../lib/main' -let code = - `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI3ODA5YTZlNjhmNDE0OWM5ODFhMmFhNTI0NTE0MzIyZiIsImFpZCI6InRNUnhXejc3UDlBQk5aQTNaSXVvTlFJTGpWQkJJVWRmIiwibmFtZSI6ImFkbWluIiwiaWNvbiI6Imh0dHBzOi8vcHVibGljLnZleXBpLmNvbS9pbWcvYXZhdGFyLzAwNTEuanBnIiwiYWNjZXNzIjpudWxsLCJpc3MiOiJvYSIsImV4cCI6MTczMDk4NDY4MiwiaWF0IjoxNzMwNzI1NDgyLCJqdGkiOiIxOWZlZTc4YjQwN2M0ZTQ5OWI1Yjg2YmJjNTNjMTA2YyJ9.vIriE-L2AZLtigWXAXHrTG2_XIELqp0bAnFEBX0Hw8w` let token = '' let querys = window.location.search.match(/token=([^&]*)/) if (querys && querys.length > 1) { diff --git a/oaweb/components/vinput.vue b/oaweb/components/vinput.vue index 5f8b517..46a1daa 100644 --- a/oaweb/components/vinput.vue +++ b/oaweb/components/vinput.vue @@ -42,11 +42,11 @@ +