diff --git a/pkg/microservice/user/core/service/permission/internal.go b/pkg/microservice/user/core/service/permission/internal.go index 4244e33214..6b472bad13 100644 --- a/pkg/microservice/user/core/service/permission/internal.go +++ b/pkg/microservice/user/core/service/permission/internal.go @@ -18,7 +18,10 @@ package permission import ( "fmt" + "time" + "github.com/koderover/zadig/v2/pkg/config" + "github.com/koderover/zadig/v2/pkg/tool/cache" "github.com/koderover/zadig/v2/pkg/types" "go.uber.org/zap" @@ -117,7 +120,27 @@ func InitializeProjectAuthorization(namespace string, isPublic bool, admins []st return fmt.Errorf("failed to bind project-admin role to given user list, error: %s", err) } + roleCache := cache.NewRedisCache(config.RedisCommonCacheTokenDB()) + // flush cache for every identity that is affected + for _, uid := range admins { + uidRoleKey := fmt.Sprintf(UIDRoleKeyFormat, uid) + err = roleCache.Delete(uidRoleKey) + if err != nil { + log.Warnf("failed to flush user-role cache for key: %s, error: %s", uidRoleKey, err) + } + } + tx.Commit() + + go func(uids []string, redisCache *cache.RedisCache) { + time.Sleep(2 * time.Second) + + for _, uid := range uids { + uidRoleKey := fmt.Sprintf(UIDRoleKeyFormat, uid) + err = roleCache.Delete(uidRoleKey) + } + }(admins, roleCache) + return nil } diff --git a/pkg/microservice/user/core/service/permission/role_binding.go b/pkg/microservice/user/core/service/permission/role_binding.go index e3c91dd0a3..e0783d9638 100644 --- a/pkg/microservice/user/core/service/permission/role_binding.go +++ b/pkg/microservice/user/core/service/permission/role_binding.go @@ -243,7 +243,7 @@ func CreateRoleBindings(role, ns string, identityList []*types.Identity, log *za } for _, gid := range groupIDList { - gidRoleKey := fmt.Sprintf(UIDRoleKeyFormat, gid) + gidRoleKey := fmt.Sprintf(GIDRoleKeyFormat, gid) err = roleCache.Delete(gidRoleKey) if err != nil { log.Warnf("failed to flush user-role cache for key: %s, error: %s", gidRoleKey, err) @@ -259,7 +259,7 @@ func CreateRoleBindings(role, ns string, identityList []*types.Identity, log *za } for _, gid := range gids { - gidRoleKey := fmt.Sprintf(UIDRoleKeyFormat, gid) + gidRoleKey := fmt.Sprintf(GIDRoleKeyFormat, gid) err = roleCache.Delete(gidRoleKey) } }(userIDList, groupIDList, roleCache)