mirror of
https://github.com/veops/oneterm.git
synced 2025-10-08 08:40:07 +08:00
95 lines
2.6 KiB
Go
95 lines
2.6 KiB
Go
package acl
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/spf13/cast"
|
|
|
|
"github.com/veops/oneterm/conf"
|
|
"github.com/veops/oneterm/remote"
|
|
)
|
|
|
|
func AddResource(ctx context.Context, uid int, resourceTypeId string, name string) (res *Resource, err error) {
|
|
token, err := remote.GetAclToken(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
res = &Resource{}
|
|
url := fmt.Sprintf("%s/acl/resources", conf.Cfg.Auth.Acl.Url)
|
|
resp, err := remote.RC.R().
|
|
SetHeaders(map[string]string{
|
|
"App-Access-Token": token,
|
|
"X-User-Id": cast.ToString(uid),
|
|
"Accept-Language": getAcceptLanguage(ctx)}).
|
|
SetBody(map[string]any{
|
|
"type_id": resourceTypeId,
|
|
"name": name,
|
|
"uid": uid,
|
|
}).
|
|
SetResult(&res).
|
|
Post(url)
|
|
err = remote.HandleErr(err, resp, func(dt map[string]any) bool { return true })
|
|
return
|
|
}
|
|
|
|
func DeleteResource(ctx context.Context, uid int, resourceId int) (err error) {
|
|
token, err := remote.GetAclToken(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
url := fmt.Sprintf("%v/acl/resources/%v", conf.Cfg.Auth.Acl.Url, resourceId)
|
|
resp, err := remote.RC.R().
|
|
SetHeaders(map[string]string{
|
|
"App-Access-Token": token,
|
|
"X-User-Id": cast.ToString(uid),
|
|
"Accept-Language": getAcceptLanguage(ctx)}).
|
|
Delete(url)
|
|
err = remote.HandleErr(err, resp, func(dt map[string]any) bool { return true })
|
|
return
|
|
}
|
|
|
|
func UpdateResource(ctx context.Context, uid int, resourceId int, updates map[string]string) (err error) {
|
|
token, err := remote.GetAclToken(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
url := fmt.Sprintf("%s/acl/resources/%d", conf.Cfg.Auth.Acl.Url, resourceId)
|
|
resp, err := remote.RC.R().
|
|
SetHeaders(map[string]string{
|
|
"App-Access-Token": token,
|
|
"X-User-Id": cast.ToString(uid),
|
|
"Accept-Language": getAcceptLanguage(ctx)}).
|
|
SetFormData(updates).
|
|
Put(url)
|
|
err = remote.HandleErr(err, resp, func(dt map[string]any) bool { return true })
|
|
return
|
|
}
|
|
|
|
func GetResourcePermissions(ctx context.Context, resourceId int) (res map[string]*ResourcePermissionsRespItem, err error) {
|
|
token, err := remote.GetAclToken(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
res = make(map[string]*ResourcePermissionsRespItem)
|
|
url := fmt.Sprintf("%v/acl/resources/%v/permissions", conf.Cfg.Auth.Acl.Url, resourceId) //TODO conf
|
|
resp, err := remote.RC.R().
|
|
SetHeader("App-Access-Token", token).
|
|
SetResult(&res).
|
|
Get(url)
|
|
err = remote.HandleErr(err, resp, func(dt map[string]any) bool { return true })
|
|
return
|
|
}
|
|
|
|
func getAcceptLanguage(ctx context.Context) string {
|
|
ginCtx, ok := ctx.(*gin.Context)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return ginCtx.GetHeader("Accept-Language")
|
|
}
|