91 lines
1.8 KiB
Go
91 lines
1.8 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go-common/app/admin/main/manager/conf"
|
|
"go-common/app/admin/main/manager/dao"
|
|
"go-common/app/admin/main/manager/model"
|
|
)
|
|
|
|
// Service biz service def.
|
|
type Service struct {
|
|
c *conf.Config
|
|
dao *dao.Dao
|
|
// rbac may not change frequent, can update every few seconds. only assignment must get from db.
|
|
points map[int64]*model.AuthItem
|
|
pointList []*model.AuthItem
|
|
groupAuth map[int64][]int64
|
|
orgAuth map[int64]*model.AuthOrg // group + role info
|
|
roleAuth map[int64][]int64
|
|
admins map[int64]bool
|
|
userNames map[int64]string // users' name
|
|
userNicknames map[int64]string // user's nickname
|
|
userDeps map[int64]string // users' department
|
|
userIds map[string]int64 // users' ids
|
|
}
|
|
|
|
// New new a Service and return.
|
|
func New(c *conf.Config) (s *Service) {
|
|
s = &Service{
|
|
c: c,
|
|
dao: dao.New(c),
|
|
}
|
|
s.syncRbac()
|
|
s.loadUnames()
|
|
go s.syncRbacproc()
|
|
go s.loadUnamesproc()
|
|
return s
|
|
}
|
|
|
|
func (s *Service) syncRbacproc() {
|
|
for {
|
|
time.Sleep(time.Second * 10)
|
|
s.syncRbac()
|
|
}
|
|
}
|
|
|
|
func (s *Service) syncRbac() {
|
|
if points, mpoints, err := s.ptrs(); err != nil {
|
|
return
|
|
} else if len(mpoints) > 0 {
|
|
s.pointList = points
|
|
s.points = mpoints
|
|
}
|
|
if admins, err := s.adms(); err != nil {
|
|
return
|
|
} else if len(admins) > 0 {
|
|
s.admins = admins
|
|
}
|
|
if ra, err := s.roleAuths(); err != nil {
|
|
return
|
|
} else if len(ra) > 0 {
|
|
s.roleAuth = ra
|
|
}
|
|
if ga, err := s.groupAuths(); err != nil {
|
|
return
|
|
} else if len(ga) > 0 {
|
|
s.groupAuth = ga
|
|
}
|
|
if oa, err := s.orgAuths(); err != nil {
|
|
return
|
|
} else if len(oa) > 0 {
|
|
s.orgAuth = oa
|
|
}
|
|
}
|
|
|
|
// Ping check dao health.
|
|
func (s *Service) Ping(c context.Context) (err error) {
|
|
return s.dao.Ping(c)
|
|
}
|
|
|
|
// Wait wait all closed.
|
|
func (s *Service) Wait() {
|
|
}
|
|
|
|
// Close close all dao.
|
|
func (s *Service) Close() {
|
|
s.dao.Close()
|
|
}
|