From 308560facd30bc8f7c6ed84f3605eed7830878a7 Mon Sep 17 00:00:00 2001 From: Thun_Ann <2865813065@qq.com> Date: Wed, 26 Feb 2025 16:29:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=BA=93ma?= =?UTF-8?q?ster=E6=9D=83=E9=99=90=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9D=83=E9=99=90=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/database.go | 46 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/database/database.go b/database/database.go index 468cee8..529a211 100644 --- a/database/database.go +++ b/database/database.go @@ -206,7 +206,7 @@ func loadData(db *Database) error { var DB *Database -func dataSet(datamap string, unit string, id string, key string, value interface{}, allowed bool) { +func dataSet(datamap string, unit string, id string, key string, value interface{}, allowed bool, master bool) { // 修改数据 dm, ok := DB.Datamaps[datamap] if !ok { @@ -214,7 +214,11 @@ func dataSet(datamap string, unit string, id string, key string, value interface DB.addDatamap(datamap) dm = DB.Datamaps[datamap] } - if !allowed && dm.Permission != "private" { + if dm.Permission == "private" && !allowed && !master { + LOG.Warn("[Warning]:Permission denied") + return + } + if dm.Permission == "master" && !master { LOG.Warn("[Warning]:Permission denied") return } @@ -325,13 +329,17 @@ func dataSet(datamap string, unit string, id string, key string, value interface } } -func dataGet(datamap string, unit string, id string, key string, allowed bool) (interface{}, bool) { +func dataGet(datamap string, unit string, id string, key string, allowed bool, master bool) (interface{}, bool) { dm, ok := DB.Datamaps[datamap] if !ok { LOG.Warn("[Warning]:Datamap %s not found", datamap) return "", false } - if !allowed && dm.Permission != "private" { + if dm.Permission != "public" && !allowed && !master { + LOG.Warn("[Warning]:Permission denied") + return "", false + } + if dm.Permission == "master" && !master { LOG.Warn("[Warning]:Permission denied") return "", false } @@ -480,6 +488,20 @@ func CreatePublicDatamap(id string) { DB.Datamaps[id] = db } +func CreateMasterDatamap(id string) { + db := newDatamap(id) + db.Permission = "master" + DB.Datamaps[id] = db +} + +func MasterGet(datamap string, unit string, id string, key string) (interface{}, bool) { + return dataGet(datamap, unit, id, key, true, true) +} + +func MasterSet(datamap string, unit string, id string, key string, value interface{}) { + dataSet(datamap, unit, id, key, value, true, true) +} + func Get(appName string, datamap string, unit string, id string, key string, isGettingConfig bool) (interface{}, bool) { // 查询数据 if unit == "config" && id == "hash" { @@ -497,19 +519,19 @@ func Get(appName string, datamap string, unit string, id string, key string, isG hash := getCorePassword() if hash == "" { // 删除数据表哈希 - dataSet(appName, "config", "hash", "", "", false) + dataSet(appName, "config", "hash", "", "", false, false) } - datahash, ok := dataGet(appName, "config", "hash", "", false) + datahash, ok := dataGet(appName, "config", "hash", "", false, false) if !ok { LOG.Error("[Error]:Error while get hash of %s", appName) } if hash != datahash { LOG.Warn("[Warning]:App %s is not allowed to access data of %s", appName, datamap) - return dataGet(appName, unit, id, key, false) + return dataGet(appName, unit, id, key, false, false) } } - return dataGet(appName, unit, id, key, true) + return dataGet(appName, unit, id, key, true, false) } func Set(appName string, datamap string, unit string, id string, key string, value interface{}) { @@ -524,18 +546,18 @@ func Set(appName string, datamap string, unit string, id string, key string, val hash := getCorePassword() if hash == "" { // 删除数据表哈希 - dataSet(appName, "config", "hash", "", "", false) + dataSet(appName, "config", "hash", "", "", true, true) } - datahash, ok := dataGet(appName, "config", "hash", "", false) + datahash, ok := dataGet(appName, "config", "hash", "", false, false) if !ok { LOG.Error("[Error]:Error while get hash of %s", appName) } if hash != datahash { LOG.Warn("[Warning]:App %s is not allowed to access data of %s", appName, datamap) - dataSet(appName, unit, id, key, value, false) + dataSet(appName, unit, id, key, value, false, false) } } - dataSet(appName, unit, id, key, value, true) + dataSet(appName, unit, id, key, value, true, false) } type DatabaseHandlerImpl struct{}