- 10 minutes to read

Team Management and Hierarchy

New .7.x

This page documents team creation, organizational hierarchy visualization, entity assignment, role-based permissions, Azure AD sync, emergency contacts, and distributed-team support for Mapify Ownership and Team Management.

Back to Ownership and Team Management


What is Team Management?

Team Management in Mapify allows administrators to:

  • Create and define teams – Establish groups (e.g., "Integration Services", "API Team", "Data Platform")
  • Manage membership – Add/remove members, assign roles (Owner, Contributor, Viewer)
  • Visualize hierarchy – See team → members → owned entities structure
  • Assign entities – Bulk assign integrations, systems, services to specific teams
  • Control permissions – Define who can create teams, assign ownership, and modify settings
  • Track external partners – Tag and manage vendor-owned systems separately

Creating and Configuring Teams

Teams are managed through Mapify > Administration > Team Management (admin access required).

Team Creation Workflow

  1. Navigate to Mapify > Administration > Team Management
  2. Click Create New Team
  3. Fill in required fields: team name, color, description
  4. Add team members (search by name, email, or Azure AD group)
  5. Set member roles
  6. Click Save

Team Definition Form (HTML)

<form aria-label="Create new team" class="team-form">
  <div class="form-group">
    <label for="team-name">Team Name <span class="required" aria-label="required">*</span></label>
    <input type="text" id="team-name" name="teamName" aria-required="true"
           placeholder="e.g., Integration Services" maxlength="100">
    <small class="form-help">Unique name (max 100 characters)</small>
  </div>

  <div class="form-group">
    <label for="team-color">Team Color <span class="required" aria-label="required">*</span></label>
    <input type="color" id="team-color" name="teamColor" value="#007bff" aria-required="true">
    <small class="form-help">Used for visual identification in graph (ensure WCAG AA contrast)</small>
  </div>

  <div class="form-group">
    <label for="team-email">Team Email</label>
    <input type="email" id="team-email" name="teamEmail"
           placeholder="integration-services@company.com">
  </div>

  <div class="form-group">
    <label>
      <input type="checkbox" id="external-partner" name="externalPartner"
             aria-describedby="external-help">
      <i class="fas fa-handshake" aria-hidden="true"></i> External Partner/Vendor Team
    </label>
    <small id="external-help" class="form-help">
      Check if this team represents an external partner or vendor
    </small>
  </div>

  <div class="form-actions">
    <button type="submit" class="btn btn-primary">
      <i class="fas fa-check" aria-hidden="true"></i> Create Team
    </button>
    <button type="button" class="btn btn-secondary">
      <i class="fas fa-times" aria-hidden="true"></i> Cancel
    </button>
  </div>
</form>

Team Member Roles

Role Permissions Typical Use
Owner Edit settings, add/remove members, assign entities, delete team Team lead, manager, primary contact
Contributor Assign entities, update entity metadata, view all team-owned entities Active team members managing integrations
Viewer View team-owned entities and metadata (read-only) Auditors, managers, stakeholders needing visibility

Organizational Hierarchy Visualization

Mapify provides three hierarchy view modes to show team structure and entity ownership.

View Modes

1. Team-Centric View — Start from teams, drill down to members and entities:

Company
├──  Integration Services (24 entities)
│   ├──  John Smith (Owner) – 12 integrations
│   ├──  Jane Doe (Contributor) – 8 integrations
│   └──  Bob Wilson (Contributor) – 4 integrations
├──  API Platform Team (18 entities)
│   ├──  Alice Johnson (Owner) – 10 APIs
│   └──  Carlos Martinez (Contributor) – 5 APIs
└──  External Partners (6 entities)
    ├──  SAP Support – 3 integrations
    └──  Salesforce Consulting – 3 integrations

2. Person-Centric View — Start from individual owners, drill down to their entities:

 John Smith (Integration Services)
├──  SAP to Salesforce Sync
├──  Customer Data ETL
└── ... (10 more)

3. Entity-Centric View — Entities grouped by team:

 Integration Services
├──  SAP to Salesforce Sync (Owner: John Smith)
├──  Customer Data ETL (Owner: John Smith)
└── ... (22 more)

Hierarchy Navigation UI (HTML)

<div class="hierarchy-view" role="navigation" aria-label="Organizational hierarchy">
  <div class="view-mode-selector" role="toolbar" aria-label="Hierarchy view mode">
    <button class="btn-view-mode active" data-mode="team" aria-pressed="true">
      <i class="fas fa-sitemap" aria-hidden="true"></i> By Team
    </button>
    <button class="btn-view-mode" data-mode="person" aria-pressed="false">
      <i class="fas fa-user" aria-hidden="true"></i> By Person
    </button>
    <button class="btn-view-mode" data-mode="entity" aria-pressed="false">
      <i class="fas fa-project-diagram" aria-hidden="true"></i> By Entity
    </button>
  </div>

  <ul role="tree" aria-label="Organizational hierarchy" class="hierarchy-tree">
    <li role="treeitem" aria-expanded="true">
      <button aria-expanded="true" class="tree-expand"
              aria-label="Collapse Integration Services">
        <i class="fas fa-folder-open" aria-hidden="true"></i>
      </button>
      <span>Integration Services</span>
      <span class="entity-count badge">24 entities</span>

      <ul role="group">
        <li role="treeitem" aria-expanded="false">
          <button aria-expanded="false" class="tree-expand"
                  aria-label="Expand John Smith">
            <i class="fas fa-folder" aria-hidden="true"></i>
          </button>
          <img src="/avatars/john.smith.jpg" alt="John Smith" class="member-avatar-small">
          <span>John Smith</span>
          <span class="entity-count badge">12 entities</span>
        </li>
      </ul>
    </li>
  </ul>
</div>

Keyboard navigation: → expand node, ← collapse node, ↑↓ navigate siblings, Enter select.


Assigning Entities to Teams

Individual Assignment

  1. Click any entity node in Mapify graph
  2. Open Entity Details panel (right sidebar)
  3. Click Ownership section → Edit
  4. Select team from dropdown, select owner from dropdown
  5. Click Save

Bulk Assignment

For assigning multiple entities at once:

  1. Select multiple nodes (Ctrl+Click or drag selection)
  2. Right-click → Bulk Assignment
  3. In bulk dialog: choose team, choose owner, preview affected entities
  4. Confirm — optionally overwrite existing assignments
<div class="bulk-assign-dialog" role="dialog" aria-labelledby="bulk-title">
  <h2 id="bulk-title">Assign Ownership to 15 Entities</h2>

  <div class="form-group">
    <label for="bulk-team">Assign to Team</label>
    <select id="bulk-team" aria-label="Select team">
      <option value="">Select team...</option>
      <option value="integration-services">Integration Services</option>
      <option value="api-platform">API Platform Team</option>
    </select>
  </div>

  <div class="form-group">
    <label for="bulk-owner">Assign to Owner</label>
    <select id="bulk-owner" aria-label="Select owner">
      <option value="">Select owner...</option>
      <option value="john.smith">John Smith</option>
      <option value="jane.doe">Jane Doe</option>
    </select>
  </div>

  <div class="overwrite-warning" role="alert">
    <i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
    <strong>Note:</strong> 8 of 15 entities already have an owner. Check "Overwrite existing" to reassign.
    <label>
      <input type="checkbox" id="overwrite-existing"> Overwrite existing assignments
    </label>
  </div>

  <div class="affected-entities-preview">
    <h3>Affected Entities (15)</h3>
    <ul aria-label="Entities to be assigned">
      <li>SAP Finance Integration (currently: unassigned)</li>
      <li>CRM Sync Service (currently: Old Owner)</li>
    </ul>
  </div>

  <div class="dialog-actions">
    <button type="button" class="btn btn-primary">
      <i class="fas fa-check" aria-hidden="true"></i> Assign Ownership
    </button>
    <button type="button" class="btn btn-secondary">Cancel</button>
  </div>
</div>

Permissions Model

Action Admin Team Owner Contributor Viewer
Create Team Yes No No No
Delete Team All Own team No No
Edit Team Settings All Own team No No
Add/Remove Members All Own team No No
Assign Entity to Team All All entities Unassigned only No
Reassign Entity All Own team Own entities No
View Hierarchy All All All All
Export Ownership Data All All Own team Own team

Permissions enforced at both UI level (hide restricted actions) and API level (reject unauthorized requests):

[HttpPost, Route("api/mapify/teams")]
public async Task<IActionResult> CreateTeam([FromBody] CreateTeamRequest request)
{
    if (!User.IsInRole("MapifyAdmin"))
        return Forbid("Only Mapify Admins can create teams.");

    if (string.IsNullOrWhiteSpace(request.TeamName))
        return BadRequest("Team name is required.");

    var team = await _teamService.CreateTeamAsync(request);
    return Ok(new { Success = true, Message = $"Team '{team.Name}' created.", TeamId = team.Id });
}

Azure AD / LDAP Integration

For enterprise deployments, sync team membership automatically:

{
  "AzureAd": {
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id"
  },
  "TeamSync": {
    "Enabled": true,
    "SyncSchedule": "0 2 * * *",
    "GroupMappings": [
      { "AzureAdGroup": "IntegrationServices", "MapifyTeam": "Integration Services", "DefaultRole": "Contributor" },
      { "AzureAdGroup": "ApiPlatformTeam", "MapifyTeam": "API Platform Team", "DefaultRole": "Contributor" }
    ]
  }
}

Emergency Contact Management

For critical production resources, define emergency contacts for 24/7 incident response.

Emergency Contact Fields

Field Type Purpose
EmergencyContact Text Primary on-call contact name
EmergencyPhone Phone 24/7 emergency phone number
BackupContact Text Secondary escalation contact
OnCallSchedule URL Link to on-call rotation schedule
EscalationPath Text "Step 1: John → Step 2: Jane → Step 3: Manager"

Governance requirements:

  • Mandatory for all production and critical-tagged entities
  • Quarterly validation — verify contacts are current and reachable
  • Backup owner required — single-owner critical resources are a governance gap

Distributed Teams and External Partners

Multi-Timezone Teams

For distributed teams across time zones, track additional metadata:

Field Example Purpose
TeamTimezone "America/New_York" Member's local timezone
TeamLocation "New York" Geographic location

Display: Node tooltip shows primary owner's local time (e.g., "9:30 AM ET") so users avoid contacting team members outside business hours.

External Partner Teams

Create separate Mapify teams for external vendors:

  • Flag: Enable "External Partner/Vendor Team" checkbox in team creation form
  • Visual: Orange border (#e65100) + badge on all partner-owned entities
  • Contact tracking: PartnerName, PartnerSupportEmail, PartnerSLA custom metadata fields
  • Security use case: Security teams can instantly filter and identify all external dependencies