mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-21 02:56:40 -08:00
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import type { ProjectRole, RoleMap } from '@/types/roles.types';
|
|
import { defineStore } from 'pinia';
|
|
import { ref, computed } from 'vue';
|
|
import * as rolesApi from '@/api/roles.api';
|
|
import { useRootStore } from './root.store';
|
|
|
|
export const useRolesStore = defineStore('roles', () => {
|
|
const rootStore = useRootStore();
|
|
|
|
const roles = ref<RoleMap>({
|
|
global: [],
|
|
project: [],
|
|
credential: [],
|
|
workflow: [],
|
|
});
|
|
const projectRoleOrder = ref<ProjectRole[]>([
|
|
'project:viewer',
|
|
'project:editor',
|
|
'project:admin',
|
|
]);
|
|
const projectRoleOrderMap = computed<Map<ProjectRole, number>>(
|
|
() => new Map(projectRoleOrder.value.map((role, idx) => [role, idx])),
|
|
);
|
|
|
|
const processedProjectRoles = computed<RoleMap['project']>(() =>
|
|
roles.value.project
|
|
.filter((role) => projectRoleOrderMap.value.has(role.role))
|
|
.sort(
|
|
(a, b) =>
|
|
(projectRoleOrderMap.value.get(a.role) ?? 0) -
|
|
(projectRoleOrderMap.value.get(b.role) ?? 0),
|
|
),
|
|
);
|
|
|
|
const processedCredentialRoles = computed<RoleMap['credential']>(() =>
|
|
roles.value.credential.filter((role) => role.role !== 'credential:owner'),
|
|
);
|
|
|
|
const processedWorkflowRoles = computed<RoleMap['workflow']>(() =>
|
|
roles.value.workflow.filter((role) => role.role !== 'workflow:owner'),
|
|
);
|
|
|
|
const fetchRoles = async () => {
|
|
roles.value = await rolesApi.getRoles(rootStore.restApiContext);
|
|
};
|
|
|
|
return {
|
|
roles,
|
|
processedProjectRoles,
|
|
processedCredentialRoles,
|
|
processedWorkflowRoles,
|
|
fetchRoles,
|
|
};
|
|
});
|