-
-
-
{{ group.label }}
-
-
-
-
+
+
Dashboard
+
+
+
@@ -243,6 +229,18 @@ import StudioSideBar from "../element/StudioSideBar.vue";
import UtilsMixin from "../../mixins/utils";
import config from "../../config";
+const DASHBOARD_ROLE_SERVICE = {
+ id: "DASHBOARD",
+ name: "Dashboard",
+ accessList: {
+ ALL: "ALL",
+ READ_SERVICE: "READ_SERVICE",
+ WRITE_SERVICE: "WRITE_SERVICE",
+ UPDATE_SERVICE: "UPDATE_SERVICE",
+ DELETE_SERVICE: "DELETE_SERVICE"
+ }
+};
+
const PREDEFINED_ROLES = [
{
key: "viewer",
@@ -251,7 +249,7 @@ const PREDEFINED_ROLES = [
description: "Minimal read-only access for business stakeholders.",
badge: "Limited view",
recommendedFor: "Founders, management, or external auditors",
- permissions: ["READ_ANALYTICS", "READ_USAGE", "READ_COMPANY", "READ_COMPLIANCE"]
+ permissions: ["READ_ANALYTICS", "READ_USAGE", "READ_COMPANY", "READ_COMPLIANCE", "READ_SERVICE"]
},
{
key: "analyst",
@@ -296,7 +294,7 @@ const PREDEFINED_ROLES = [
description: "Full access to manage team, settings, verification, billing, and company account.",
badge: "Full access",
recommendedFor: "Organization owners / super admins",
- permissions: ["READ_VERIFIED_USER", "READ_WIDGET_CONFIG", "WRITE_WIDGET_CONFIG", "UPDATE_WIDGET_CONFIG", "READ_WEBHOOK_CONFIG", "WRITE_WEBHOOK_CONFIG", "UPDATE_WEBHOOK_CONFIG", "DELETE_WEBHOOK_CONFIG", "READ_ANALYTICS", "READ_USAGE", "READ_CREDIT", "READ_COMPANY", "DELETE_COMPANY", "UPDATE_COMPANY_STATUS", "READ_COMPANY_EXECUTIVES", "READ_DOCUMENT", "VERIFY_DOCUMENT", "READ_COMPLIANCE"]
+ permissions: ["READ_VERIFIED_USER", "READ_WIDGET_CONFIG", "WRITE_WIDGET_CONFIG", "UPDATE_WIDGET_CONFIG", "READ_WEBHOOK_CONFIG", "WRITE_WEBHOOK_CONFIG", "UPDATE_WEBHOOK_CONFIG", "DELETE_WEBHOOK_CONFIG", "READ_ANALYTICS", "READ_USAGE", "READ_CREDIT", "READ_COMPANY", "DELETE_COMPANY", "UPDATE_COMPANY_STATUS", "READ_COMPANY_EXECUTIVES", "READ_DOCUMENT", "VERIFY_DOCUMENT", "READ_COMPLIANCE", "READ_SERVICE", "WRITE_SERVICE", "UPDATE_SERVICE", "DELETE_SERVICE"]
},
{
key: "custom",
@@ -384,44 +382,7 @@ const SSI_PREDEFINED_ROLES = [
}
];
-const DASHBOARD_PREDEFINED_ROLES = [
- {
- key: "dashboard_viewer",
- name: "Viewer",
- icon: "mdi-eye-outline",
- description: "Read-only access to Dashboard service operations.",
- badge: "Read-only",
- recommendedFor: "Stakeholders who need Dashboard visibility",
- permissions: ["READ_SERVICE"]
- },
- {
- key: "dashboard_editor",
- name: "Editor",
- icon: "mdi-pencil-outline",
- description: "Access to read and modify Dashboard service configuration.",
- badge: "Edit access",
- recommendedFor: "Operations or product teams",
- permissions: ["READ_SERVICE", "WRITE_SERVICE", "UPDATE_SERVICE", "DELETE_SERVICE"]
- },
- {
- key: "dashboard_admin",
- name: "Admin",
- icon: "mdi-shield-star-outline",
- description: "Full Dashboard service access.",
- badge: "Full access",
- recommendedFor: "Dashboard administrators",
- permissions: ["ALL"]
- },
- {
- key: "custom",
- name: "Custom Role",
- icon: "mdi-tune-variant",
- description: "Start with no permissions and configure manually.",
- badge: "Advanced",
- recommendedFor: "Custom enterprise setups",
- permissions: []
- }
-];
+
export default {
name: "AdminTeams",
@@ -437,8 +398,11 @@ export default {
SSI_PREDEFINED_ROLES() {
return SSI_PREDEFINED_ROLES;
},
- DASHBOARD_PREDEFINED_ROLES() {
- return DASHBOARD_PREDEFINED_ROLES;
+ dashboardRoleService() {
+ return DASHBOARD_ROLE_SERVICE;
+ },
+ dashboardPermissions() {
+ return ['ALL', 'READ_SERVICE', 'WRITE_SERVICE', 'UPDATE_SERVICE', 'DELETE_SERVICE'];
},
categorizedServices() {
const ssiServices = this.localAllServices.filter(s => s.id === config.SERVICE_TYPES.SSI_API);
@@ -459,25 +423,24 @@ export default {
hasSSIService() {
return this.localAllServices.some(s => s.id === config.SERVICE_TYPES.SSI_API);
},
- hasDashboardService() {
- return this.localAllServices.some(s => s.id === config.SERVICE_TYPES.DASHBOARD);
- },
+
hasIDService() {
return this.localAllServices.some(
- s => s.id !== config.SERVICE_TYPES.SSI_API && s.id !== config.SERVICE_TYPES.QUEST && s.id !== config.SERVICE_TYPES.DASHBOARD
+ s => s.id !==
+ config.SERVICE_TYPES.SSI_API && s.id !==
+ config.SERVICE_TYPES.QUEST && s.id !==
+ DASHBOARD_ROLE_SERVICE.id
);
},
ssiServices() {
return this.localAllServices.filter(s => s.id === config.SERVICE_TYPES.SSI_API);
},
- dashboardServices() {
- return this.localAllServices.filter(s => s.id === config.SERVICE_TYPES.DASHBOARD);
- },
idServices() {
return this.localAllServices.filter(
- s => s.id !== config.SERVICE_TYPES.SSI_API &&
- s.id !== config.SERVICE_TYPES.QUEST &&
- s.id !== config.SERVICE_TYPES.DASHBOARD
+ s => s.id !==
+ config.SERVICE_TYPES.SSI_API && s.id !==
+ config.SERVICE_TYPES.QUEST && s.id !==
+ DASHBOARD_ROLE_SERVICE.id
);
}
},
@@ -508,7 +471,6 @@ export default {
selectedRoles: {
id: 'viewer',
ssi: 'auditor',
- dashboard: 'custom'
}
}
},
@@ -547,15 +509,7 @@ export default {
{ label: 'Document', icon: 'mdi-file-document-outline', iconColor: '#92400e', keys: ['READ_DOCUMENT', 'VERIFY_DOCUMENT'] },
{ label: 'Compliance', icon: 'mdi-shield-check-outline', iconColor: '#1d4ed8', keys: ['READ_COMPLIANCE'] },
];
- const DASHBOARD_GROUPS = [
- { label: 'General', icon: 'mdi-star-outline', iconColor: '#6366f1', keys: ['ALL'] },
- { label: 'Dashboard Controls', icon: 'mdi-view-dashboard-outline', iconColor: '#0f766e', keys: ['READ_SERVICE', 'WRITE_SERVICE', 'UPDATE_SERVICE', 'DELETE_SERVICE'] }
- ];
- const groupDefs = serviceId === config.SERVICE_TYPES.SSI_API
- ? SSI_GROUPS
- : serviceId === config.SERVICE_TYPES.DASHBOARD
- ? DASHBOARD_GROUPS
- : ID_GROUPS;
+ const groupDefs = serviceId === config.SERVICE_TYPES.SSI_API ? SSI_GROUPS : ID_GROUPS;
const assignedKeys = new Set();
const result = [];
for (const group of groupDefs) {
@@ -596,10 +550,6 @@ export default {
const ssiDefault = SSI_PREDEFINED_ROLES.find(r => r.key === 'auditor');
if (ssiDefault) this.selectPredefinedRole(ssiDefault, 'ssi');
}
- if (this.hasDashboardService) {
- const dashboardDefault = DASHBOARD_PREDEFINED_ROLES.find(r => r.key === 'dashboard_viewer');
- if (dashboardDefault) this.selectPredefinedRole(dashboardDefault, 'dashboard');
- }
},
@@ -618,45 +568,29 @@ export default {
this.roleModel = { ...role };
this.selectedRoles.id = this.detectSelectedPredefinedRole('id');
this.selectedRoles.ssi = this.detectSelectedPredefinedRole('ssi');
- this.selectedRoles.dashboard = this.detectSelectedPredefinedRole('dashboard');
this.$root.$emit("bv::toggle::collapse", "sidebar-right");
},
- getServiceIdsByType(serviceType) {
- if (serviceType === 'ssi') return this.ssiServices.map(s => s.id);
- if (serviceType === 'dashboard') return this.dashboardServices.map(s => s.id);
- return this.idServices.map(s => s.id);
- },
- getAllPermissionKeysForServiceType(serviceType) {
- const targetServices = serviceType === 'ssi'
+ getServiceIdsByType(serviceType) {
+ const services = serviceType === 'ssi'
? this.ssiServices
- : serviceType === 'dashboard'
- ? this.dashboardServices
- : this.idServices;
- const keys = new Set();
- targetServices.forEach(service => {
- if (!service?.accessList) return;
- Object.keys(service.accessList).forEach(key => keys.add(key));
- });
- return Array.from(keys);
+ : this.idServices;
+ const serviceIds = services.map(s => s.id);
+ return serviceType === 'id' ? [...serviceIds, DASHBOARD_ROLE_SERVICE.id] : serviceIds;
},
+
detectSelectedPredefinedRole(serviceType) {
const serviceIds = new Set(this.getServiceIdsByType(serviceType));
const currentPermissions = (this.roleModel.permissions || [])
.filter(p => serviceIds.has(p.serviceType))
.map(p => p.access);
const currentSet = new Set(currentPermissions);
- const allServicePermissions = new Set(this.getAllPermissionKeysForServiceType(serviceType));
- const roles = serviceType === 'ssi'
+ const roles = (serviceType === 'ssi'
? SSI_PREDEFINED_ROLES
- : serviceType === 'dashboard'
- ? DASHBOARD_PREDEFINED_ROLES
- : PREDEFINED_ROLES;
- const filteredRoles = roles.filter(r => r.key !== 'custom');
+ : PREDEFINED_ROLES).filter(r=>r.key !=='custom')
if (!currentSet.size) return 'custom';
- const matched = filteredRoles.find(role => {
+ const matched = roles.find(role => {
if (role.permissions.includes('ALL')) {
- if (currentSet.has('ALL')) return true;
- return Array.from(allServicePermissions).every(access => currentSet.has(access));
+ return currentSet.has('ALL');
}
if (role.permissions.length !== currentSet.size) return false;
return role.permissions.every(p => currentSet.has(p));
@@ -679,18 +613,11 @@ export default {
const permissions = [];
const targetServices = serviceType === 'ssi'
? this.ssiServices
- : serviceType === 'dashboard'
- ? this.dashboardServices
- : this.idServices;
+ : [...this.idServices, DASHBOARD_ROLE_SERVICE];
targetServices.forEach(service => {
- if (!service?.accessList) return;
- if (role.permissions.includes('ALL')) {
- Object.keys(service.accessList).forEach(access => {
- if (service.accessList[access] !== undefined) {
- permissions.push({ serviceType: service.id, access });
- }
- });
+ if (role.permissions.includes('ALL') && service.accessList.ALL !== undefined) {
+ permissions.push({ serviceType: service.id, access: 'ALL' });
return;
}
role.permissions.forEach(access => {
@@ -866,7 +793,7 @@ export default {
],
"servicePermissions": []
}
- this.selectedRoles = { id: 'viewer', ssi: 'auditor', dashboard: 'custom' };
+ this.selectedRoles = { id: 'viewer', ssi: 'auditor' };
this.edit = false;
},
},
diff --git a/src/config.js b/src/config.js
index 3c8f575..fe0f207 100644
--- a/src/config.js
+++ b/src/config.js
@@ -104,17 +104,8 @@ config['SERVICE_TYPES'] = Object.freeze({
SSI_API: 'SSI_API',
CAVACH_API: 'CAVACH_API',
QUEST: 'QUEST',
- DASHBOARD: 'DASHBOARD',
})
-config['DASHBOARD_ACCESS'] = Object.freeze({
- ALL: 'ALL',
- READ_SERVICE: 'READ_SERVICE',
- WRITE_SERVICE: 'WRITE_SERVICE',
- UPDATE_SERVICE: 'UPDATE_SERVICE',
- DELETE_SERVICE: 'DELETE_SERVICE',
-
-})
config['GRANT_TYPES_ENUM'] = Object.freeze({
'SSI_API': 'access_service_ssi',
diff --git a/src/store/mainStore.js b/src/store/mainStore.js
index 78464ce..25fd41e 100644
--- a/src/store/mainStore.js
+++ b/src/store/mainStore.js
@@ -1050,6 +1050,7 @@ const mainStore = {
let resp = await RequestHandler(url, 'GET', {}, headers)
if (resp) {
+ resp = resp.filter(x => !(x.id == 'DASHBOARD'))
commit('insertAllServices', resp);
} else {
return null