mirror of
https://github.com/portainer/portainer.git
synced 2025-07-21 14:29:40 +02:00
feat(cache): introduce cache option [EE-6293] (#10641)
This commit is contained in:
parent
fffc7b364e
commit
2c032f1739
70 changed files with 418 additions and 45 deletions
|
@ -4,11 +4,13 @@ import { KubernetesCommonParams } from 'Kubernetes/models/common/params';
|
|||
import KubernetesNamespaceConverter from 'Kubernetes/converters/namespace';
|
||||
import { updateNamespaces } from 'Kubernetes/store/namespace';
|
||||
import $allSettled from 'Portainer/services/allSettled';
|
||||
import { getSelfSubjectAccessReview } from '@/react/kubernetes/namespaces/getSelfSubjectAccessReview';
|
||||
|
||||
class KubernetesNamespaceService {
|
||||
/* @ngInject */
|
||||
constructor($async, KubernetesNamespaces, LocalStorage) {
|
||||
constructor($async, KubernetesNamespaces, LocalStorage, $state) {
|
||||
this.$async = $async;
|
||||
this.$state = $state;
|
||||
this.KubernetesNamespaces = KubernetesNamespaces;
|
||||
this.LocalStorage = LocalStorage;
|
||||
|
||||
|
@ -66,8 +68,10 @@ class KubernetesNamespaceService {
|
|||
try {
|
||||
// get the list of all namespaces (RBAC allows users to see the list of namespaces)
|
||||
const data = await this.KubernetesNamespaces().get().$promise;
|
||||
// get the status of each namespace (RBAC will give permission denied for status of unauthorised namespaces)
|
||||
const promises = data.items.map((item) => this.KubernetesNamespaces().status({ id: item.metadata.name }).$promise);
|
||||
// get the status of each namespace with accessReviews (to avoid failed forbidden responses, which aren't cached)
|
||||
const accessReviews = await Promise.all(data.items.map((namespace) => getSelfSubjectAccessReview(this.$state.params.endpointId, namespace.metadata.name)));
|
||||
const allowedNamespaceNames = accessReviews.filter((ar) => ar.status.allowed).map((ar) => ar.spec.resourceAttributes.namespace);
|
||||
const promises = allowedNamespaceNames.map((name) => this.KubernetesNamespaces().status({ id: name }).$promise);
|
||||
const namespaces = await $allSettled(promises);
|
||||
// only return namespaces if the user has access to namespaces
|
||||
const allNamespaces = namespaces.fulfilled.map((item) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue