mirror of
https://github.com/henrygd/beszel.git
synced 2026-04-13 08:21:50 +02:00
hub: optimize System.HasUser check
This commit is contained in:
@@ -8,7 +8,6 @@ import (
|
|||||||
"hash/fnv"
|
"hash/fnv"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"slices"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@@ -363,12 +362,16 @@ func (sys *System) HasUser(app core.App, user *core.Record) bool {
|
|||||||
if v, _ := utils.GetEnv("SHARE_ALL_SYSTEMS"); v == "true" {
|
if v, _ := utils.GetEnv("SHARE_ALL_SYSTEMS"); v == "true" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
record, err := sys.getRecord(app)
|
var recordData = struct {
|
||||||
if err != nil {
|
Users string
|
||||||
|
}{}
|
||||||
|
err := app.DB().NewQuery("SELECT users FROM systems WHERE id={:id}").
|
||||||
|
Bind(dbx.Params{"id": sys.Id}).
|
||||||
|
One(&recordData)
|
||||||
|
if err != nil || recordData.Users == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
users := record.GetStringSlice("users")
|
return strings.Contains(recordData.Users, user.Id)
|
||||||
return slices.Contains(users, user.Id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// setDown marks a system as down in the database.
|
// setDown marks a system as down in the database.
|
||||||
|
|||||||
@@ -436,7 +436,7 @@ func TestHasUser(t *testing.T) {
|
|||||||
user2, err := tests.CreateUser(hub, "user2@test.com", "password123")
|
user2, err := tests.CreateUser(hub, "user2@test.com", "password123")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
record, err := tests.CreateRecord(hub, "systems", map[string]any{
|
systemRecord, err := tests.CreateRecord(hub, "systems", map[string]any{
|
||||||
"name": "has-user-test",
|
"name": "has-user-test",
|
||||||
"host": "127.0.0.1",
|
"host": "127.0.0.1",
|
||||||
"port": "33914",
|
"port": "33914",
|
||||||
@@ -444,7 +444,7 @@ func TestHasUser(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
sys, err := sm.GetSystemFromStore(record.Id)
|
sys, err := sm.GetSystemFromStore(systemRecord.Id)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Run("user in list returns true", func(t *testing.T) {
|
t.Run("user in list returns true", func(t *testing.T) {
|
||||||
@@ -468,4 +468,13 @@ func TestHasUser(t *testing.T) {
|
|||||||
t.Setenv("BESZEL_HUB_SHARE_ALL_SYSTEMS", "true")
|
t.Setenv("BESZEL_HUB_SHARE_ALL_SYSTEMS", "true")
|
||||||
assert.True(t, sys.HasUser(hub, user2))
|
assert.True(t, sys.HasUser(hub, user2))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("additional user works", func(t *testing.T) {
|
||||||
|
assert.False(t, sys.HasUser(hub, user2))
|
||||||
|
systemRecord.Set("users", []string{user1.Id, user2.Id})
|
||||||
|
err = hub.Save(systemRecord)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.True(t, sys.HasUser(hub, user1))
|
||||||
|
assert.True(t, sys.HasUser(hub, user2))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user