namespace SeaHaven.Services.Constants { /// /// Canonical, immutable registry of team-members permission keys. /// Exactly the 22 approved prototype keys; stored overrides must reference /// these keys. Keys are stable identifiers and must never be renamed. /// public static class TeamPermissionKeys { public const string ManageTeamMembers = "manageTeamMembers"; public const string ChangeTeamMemberRole = "changeTeamMemberRole"; public const string CreateVendors = "createVendors"; public const string EditVendors = "editVendors"; public const string DeactivateVendors = "deactivateVendors"; public const string CreateSites = "createSites"; public const string EditSites = "editSites"; public const string DeleteSites = "deleteSites"; public const string CreateServices = "createServices"; public const string EditServices = "editServices"; public const string DeactivateServices = "deactivateServices"; public const string CreateCompletionDocTemplates = "createCompletionDocTemplates"; public const string EditCompletionDocTemplates = "editCompletionDocTemplates"; public const string DeleteCompletionDocTemplates = "deleteCompletionDocTemplates"; public const string CreateWorkOrders = "createWorkOrders"; public const string EditOthersWorkOrders = "editOthersWorkOrders"; public const string CancelWorkOrders = "cancelWorkOrders"; public const string DeleteWorkOrders = "deleteWorkOrders"; public const string RequestUplifts = "requestUplifts"; public const string AutoApproveUplifts = "autoApproveUplifts"; public const string ReviewUplifts = "reviewUplifts"; public const string ViewAllDispatchersOnDashboard = "viewAllDispatchersOnDashboard"; private static readonly IReadOnlyList AllKeys = Array.AsReadOnly(new[] { ManageTeamMembers, ChangeTeamMemberRole, CreateVendors, EditVendors, DeactivateVendors, CreateSites, EditSites, DeleteSites, CreateServices, EditServices, DeactivateServices, CreateCompletionDocTemplates, EditCompletionDocTemplates, DeleteCompletionDocTemplates, CreateWorkOrders, EditOthersWorkOrders, CancelWorkOrders, DeleteWorkOrders, RequestUplifts, AutoApproveUplifts, ReviewUplifts, ViewAllDispatchersOnDashboard }); public static IReadOnlyList All => AllKeys; public static IReadOnlySet KnownKeys { get; } = new HashSet(AllKeys, StringComparer.OrdinalIgnoreCase); public static bool IsKnown(string? permissionKey) => !string.IsNullOrWhiteSpace(permissionKey) && KnownKeys.Contains(permissionKey); } }