CEC-2977 Filter portal access based on auth provider (#231)
* fix/fleet-vehicles-search * fix/fleet-name-update * Update hasRole logic, create RoleWrap component * Add MAGNA and MAGNAGROUP env vars * Add Permissions Co-authored-by: jwu-fisker <jwu@fiskerinc.com>
This commit is contained in:
@@ -6,16 +6,12 @@ export const Roles = {
|
||||
DELETE: "8f78dce7-f5f9-4033-a10c-c9c7408bfcfe",
|
||||
CERTIFICATES: "746f34b0-9ba0-4b5d-8d84-0256a9c8e390",
|
||||
APPROVESUPPLIERS: "a6c9805e-80b2-42b2-bfbb-9df52e5504d8",
|
||||
MAGNAGROUP: process.env.REACT_APP_MAGNA_GROUP_ID,
|
||||
};
|
||||
|
||||
export const hasRoleToken = (roles, token) => {
|
||||
if (!roles || roles.length === 0) return true;
|
||||
|
||||
const groups = getGroups(token);
|
||||
|
||||
if (!groups) return false;
|
||||
|
||||
return hasRole(roles, groups);
|
||||
export const Providers = {
|
||||
FISKER: "Fisker",
|
||||
MAGNA: process.env.REACT_APP_MAGNA_PROVIDER,
|
||||
};
|
||||
|
||||
export const getGroups = (token) => {
|
||||
@@ -26,13 +22,54 @@ export const getGroups = (token) => {
|
||||
return payload["custom:groups"];
|
||||
};
|
||||
|
||||
export const hasRole = (roles, groups) => {
|
||||
if (!roles || roles.length === 0) return true;
|
||||
if (!groups) return false;
|
||||
export const getProviders = (token) => {
|
||||
const payload = parsePayload(token);
|
||||
|
||||
for (let role of roles) {
|
||||
if (groups.indexOf(role) > -1) return true;
|
||||
if (!payload || !payload["identities"] || payload["identities"].length === 0)
|
||||
return null;
|
||||
|
||||
return payload["identities"].map((identity) => identity["providerName"]);
|
||||
};
|
||||
|
||||
export const hasRole = (userGroups, rolesPerProvider, userProviders) => {
|
||||
if (!rolesPerProvider || rolesPerProvider.length === 0) return true;
|
||||
|
||||
if (!userGroups || userGroups.length === 0) return false;
|
||||
|
||||
if (rolesPerProvider && userProviders) {
|
||||
for (const provider of userProviders) {
|
||||
if (rolesPerProvider[provider]) {
|
||||
const rolesForProvider = rolesPerProvider[provider];
|
||||
if (!rolesForProvider || rolesForProvider.length === 0) return true;
|
||||
if (
|
||||
rolesForProvider.filter((role) => userGroups.includes(role)).length >
|
||||
0
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
export const Permissions = {
|
||||
FiskerRead: { [Providers.FISKER]: [Roles.CREATE, Roles.READ] },
|
||||
FiskerCreate: { [Providers.FISKER]: [Roles.CREATE] },
|
||||
FiskerDelete: { [Providers.FISKER]: [Roles.DELETE] },
|
||||
FiskerSupplierAdmin: { [Providers.FISKER]: [Roles.APPROVESUPPLIERS] },
|
||||
FiskerCertificate: { [Providers.FISKER]: [Roles.CERTIFICATES] },
|
||||
FiskerTools: {
|
||||
[Providers.FISKER]: [Roles.APPROVESUPPLIERS, Roles.CERTIFICATES],
|
||||
},
|
||||
Magna: { [Providers.MAGNA]: [Roles.MAGNAGROUP] },
|
||||
FiskerMagnaRead: {
|
||||
[Providers.FISKER]: [Roles.CREATE, Roles.READ],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
FiskerMagnaCreate: {
|
||||
[Providers.FISKER]: [Roles.CREATE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user