A typed permission matrix can map each role to the actions it can perform.

Permission Matrix Case

permissions.ts
type Role = "viewer" | "editor" | "admin";
type Action = "read" | "write" | "delete";

const permissions: Record<Role, Action[]> = {
    viewer: ["read"],
    editor: ["read", "write"],
    admin: ["read", "write", "delete"]
};

function allowedActions(role: Role): string {
    return permissions[role].join(",");
}

const selectedRole: Role = ;
const actions: string = allowedActions(selectedRole);
const canDelete: boolean = permissions[selectedRole].includes("delete");

console.log(`role=${selectedRole};actions=${actions};delete=${canDelete}`);
type Role = "viewer" | "editor" | "admin";
type Action = "read" | "write" | "delete";

const permissions: Record<Role, Action[]> = {
    viewer: ["read"],
    editor: ["read", "write"],
    admin: ["read", "write", "delete"]
};

function allowedActions(role: Role): string {
    return permissions[role].join(",");
}

const selectedRole: Role = ;
const actions: string = allowedActions(selectedRole);
const canDelete: boolean = permissions[selectedRole].includes("delete");

console.log(`role=${selectedRole};actions=${actions};delete=${canDelete}`);
permission matrix Record types keep lookup keys and stored actions aligned with the domain model.