diff --git a/portal-ui/src/common/SecureComponent/SecureComponent.tsx b/portal-ui/src/common/SecureComponent/SecureComponent.tsx
index 575475aa6..9a831ccc8 100644
--- a/portal-ui/src/common/SecureComponent/SecureComponent.tsx
+++ b/portal-ui/src/common/SecureComponent/SecureComponent.tsx
@@ -19,7 +19,7 @@ import { store } from "../../store";
import { hasAccessToResource } from "./permissions";
export const hasPermission = (
- resource: string | undefined,
+ resource: string | string[] | undefined,
scopes: string[],
matchAll?: boolean,
containsResource?: boolean
@@ -29,17 +29,31 @@ export const hasPermission = (
}
const state = store.getState();
const sessionGrants = state.console.session.permissions || {};
- const resourceGrants =
- sessionGrants[resource] ||
- sessionGrants[`arn:aws:s3:::${resource}/*`] ||
- [];
+
const globalGrants = sessionGrants["arn:aws:s3:::*"] || [];
+ let resources: string[] = [];
+ let resourceGrants: string[] = [];
let containsResourceGrants: string[] = [];
- if (containsResource) {
- const matchResource = `arn:aws:s3:::${resource}`;
- for (const [key, value] of Object.entries(sessionGrants)) {
- if (key.includes(matchResource)) {
- containsResourceGrants = containsResourceGrants.concat(value);
+
+ if (Array.isArray(resource)) {
+ resources = resources.concat(resource);
+ } else {
+ resources.push(resource);
+ }
+ for (let i = 0; i < resources.length; i++) {
+ if (resources[i]) {
+ resourceGrants = resourceGrants.concat(
+ sessionGrants[resources[i]] ||
+ sessionGrants[`arn:aws:s3:::${resources[i]}/*`] ||
+ []
+ );
+ if (containsResource) {
+ const matchResource = `arn:aws:s3:::${resources[i]}`;
+ for (const [key, value] of Object.entries(sessionGrants)) {
+ if (key.includes(matchResource)) {
+ containsResourceGrants = containsResourceGrants.concat(value);
+ }
+ }
}
}
}
@@ -56,7 +70,7 @@ interface ISecureComponentProps {
matchAll?: boolean;
children: any;
scopes: string[];
- resource: string;
+ resource: string | string[];
containsResource?: boolean;
}
diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx
index 0a216a045..f8686b0de 100644
--- a/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx
+++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx
@@ -176,7 +176,6 @@ const ListBuckets = ({
const renderItemLine = (index: number) => {
const bucket = filteredRecords[index] || null;
-
if (bucket) {
return (
);
}
-
return null;
};
+ const createBucketButtonResources: string[] =
+ Array.from(Object.keys(session.permissions)) || [];
+
return (
{deleteOpen && (
@@ -263,7 +264,7 @@ const ListBuckets = ({
{
+ const createBucketResources: string[] =
+ Array.from(Object.keys(session.permissions)) || [];
+ return hasPermission(
+ createBucketResources,
+ IAM_PAGES_PERMISSIONS[IAM_PAGES.ADD_BUCKETS]
+ );
+ },
},
{
component: Buckets,