usermngmt/cache/role.go

77 lines
1.6 KiB
Go
Raw Normal View History

2021-11-11 08:16:17 +00:00
package cache
import (
"context"
"encoding/json"
"sync"
"github.com/Selly-Modules/logger"
"github.com/Selly-Modules/usermngmt/model"
"go.mongodb.org/mongo-driver/bson"
)
// 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
logger.Error("usermngmt - CacheRole", logger.LogData{
2022-10-06 02:14:45 +00:00
Source: "usermngmt.cache.Roles",
Message: err.Error(),
Data: entry,
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 {
2021-11-11 08:16:17 +00:00
logger.Error("usermngmt - GetCachedRole - Unmarshal", logger.LogData{
2022-10-06 02:14:45 +00:00
Source: "usermngmt.cache.GetCachedRole",
Message: err.Error(),
Data: cachedRole,
2021-11-11 08:16:17 +00:00
})
}
return cachedRole
}