usermngmt/cache/role.go

69 lines
1.3 KiB
Go
Raw Normal View History

2021-11-11 08:16:17 +00:00
package cache
import (
"context"
"encoding/json"
2023-04-05 10:54:05 +00:00
"log"
2021-11-11 08:16:17 +00:00
"sync"
"go.mongodb.org/mongo-driver/bson"
2023-04-05 10:54:05 +00:00
"git.selly.red/Selly-Modules/usermngmt/model"
2021-11-11 08:16:17 +00:00
)
// Roles ...
func Roles() {
var (
ctx = context.Background()
wg sync.WaitGroup
cond = bson.M{}
)
// Find
roles := roleFindByCondition(ctx, cond)
permissions := permissionFindByCondition(ctx, cond)
wg.Add(len(roles))
for _, value := range roles {
go func(role model.DBRole) {
defer wg.Done()
rolePermissions := make([]string, 0)
// Get role permissions
for _, permission := range permissions {
if permission.RoleID == role.ID {
rolePermissions = append(rolePermissions, permission.Code)
}
}
// Cache Role
2021-12-08 04:42:31 +00:00
entry := CachedRole{
2021-11-11 08:16:17 +00:00
Role: role.Code,
IsAdmin: role.IsAdmin,
Permissions: rolePermissions,
2021-12-08 04:42:31 +00:00
}
if err := SetKeyValue(role.ID.Hex(), entry, 0); err != nil {
2021-11-11 08:16:17 +00:00
return
}
}(value)
}
wg.Wait()
return
}
// GetCachedRole ...
func GetCachedRole(key string) CachedRole {
2021-12-08 04:42:31 +00:00
value, err := GetValueByKey(key)
2021-11-11 08:16:17 +00:00
if err != nil {
Roles()
2021-12-08 04:42:31 +00:00
value, _ = GetValueByKey(key)
2021-11-11 08:16:17 +00:00
}
2021-12-08 04:42:31 +00:00
// Unmarshal data
2021-11-11 08:16:17 +00:00
var cachedRole CachedRole
2021-12-08 04:42:31 +00:00
if err := json.Unmarshal(value, &cachedRole); err != nil {
2023-04-05 10:54:05 +00:00
log.Println("usermngmt - GetCachedRole - Unmarshal: ", err)
2021-11-11 08:16:17 +00:00
}
return cachedRole
}