next-terminal/server/global/security/security.go
2022-10-23 20:05:13 +08:00

67 lines
1.1 KiB
Go

package security
import (
"sort"
"sync"
)
type Security struct {
ID string
Rule string
IP string
Priority int64 // 越小优先级越高
}
type Manager struct {
securities sync.Map
values []*Security
}
func NewManager() *Manager {
return &Manager{}
}
func (m *Manager) Clear() {
m.securities.Range(func(k, _ interface{}) bool {
m.securities.Delete(k)
return true
})
}
func (m *Manager) LoadData() {
var values []*Security
m.securities.Range(func(key, value interface{}) bool {
if security, ok := value.(*Security); ok {
values = append(values, security)
}
return true
})
sort.Slice(values, func(i, j int) bool {
// 优先级数字越小代表优先级越高,因此此处用小于号
return values[i].Priority < values[j].Priority
})
m.values = values
}
func (m *Manager) Values() []*Security {
return m.values
}
func (m *Manager) Add(s *Security) {
m.securities.Store(s.ID, s)
m.LoadData()
}
func (m *Manager) Del(id string) {
m.securities.Delete(id)
m.LoadData()
}
var GlobalSecurityManager *Manager
func init() {
GlobalSecurityManager = NewManager()
}