Skip to content

Roles Management Page

  • File: src/pages/private/admin/roles/index.svelte

Overview

The Roles Management page provides an interface for administrators to manage user roles and permissions within the system. It allows for creating, reading, updating, and deleting roles, along with managing associated permissions.

Data Structures

Role Interface

ts
interface Role {
  name: string;
  notes: string;
  id?: string;
  permissions?: string[];
}

Core Functions

1. Role Management

svelte
// Fetch roles and permissions
async function getRoles() {
  const { data, error } = await q<{ roles: any; permissions: any }>(`
    query {
      roles: tenantRoles {
        items {
          id, name, notes
          permissions {
            permissionId
          }
        }
      }
      permissions {
        items {
          id, name, notes, active
        }
      }
    }
  `);

  return processRoleData(data);
}

// Create new role
async function createRole(role) {
  const { data, error } = await create<{ ret: any }>(
    "createTenantRole",
    "CreateTenantRole",
    role
  );
  return handleResponse(data, error);
}

// Update existing role
async function updateRole(role) {
  const { data, error } = await update<{ ret: any }>(
    "updateTenantRole",
    "UpdateTenantRole",
    role
  );
  return handleResponse(data, error);
}

// Delete role
async function deleteRole(id) {
  const { data, error } = await delete2<{ ret: any }>(
    "deleteTenantRole",
    id
  );
  return handleResponse(data, error);
}

Event Handlers

1. Role Operations

svelte
// Save role (create/update)
async function saveRole({ detail }) {
  const operation = activeRole ? updateRole : createRole;
  const ret = await operation({
    ...detail,
    id: activeRole?.id
  });

  if (!ret.success) {
    showError(ret.message);
    return;
  }

  showModal = false;
  activeRole = null;
  await refresh();
}

// Delete role
async function doDelete() {
  const ret = await deleteRole(activeRole.id);
  if (!ret.success) {
    showError(ret.message);
    return;
  }

  activeRole = null;
  showDeleteModal = false;
  await refresh();
}

Released under the MIT License.