Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· InitializerService
Säubern Sie die Berichte und Dashboard-Reihen, und stoppen Aussaat VIEW_DASHBOARD
VIEW_DASHBOARD (0), VIEW_REPORTS (1) und EXPORT_REPORTS (2) wurden gelöscht RoleRightType heute, zusammen mit den zwei Seiten, die sie benannt. Dies entfernt, was sie zurückgelassen, über beide Codierungen. ************ gelistet VIEW_DASHBOARD unter den Rechten gewährt jeder neuen Organisation, so kommt es auch heraus. Das war die einzige Referenz außerhalb einer Definitionsseite, und der Compiler ist, was es gefunden - eine Erinnerung, dass Nach einem richtigen Namen zu suchen und das enum zu lesen sind nicht die gleiche Suche. VIEW_TASKS fehlt absichtlich bei der Säuberung: App/Tass sieht identisch aus wie die gelöschten Seiten in der Quelle, aber geplant, abgeschlossen zu werden. Id 0 ist eine echte ID - das Prädikat listet es explizit, und alles in diesem Weg, dass Angelehnt auf Wahrhaftigkeit würde die Reihen von VIEW_DASHBOARD schweigend überspringen.
· kamo-shared-library
Löschen VIEW_DASHBOARD, VIEW_REPORTS und EXPORT_REPORTS
Alle drei benannten Seiten, die auf Festplatte existierten und durch nichts gesichert waren: App/Dashboard gerenderte Musterposten direkt aus i18n, App/Berichte importiert Framer-Motion und next-intl und keine Daten überhaupt, und es gibt keine Berichte Motor oder Export-Pfad überall in der Plattform. Keine der beiden Seiten wurde von navRegistry verlinkt und kein AppType behauptet sie - der Test, der die Empfehlungscode-Rechte am Leben gehalten, da MARKETING wirbt diese als KOMPLETT. VIEW_TASKS (120) wurde daneben abgetrennt und wird bewusst aufbewahrt. ununterscheidbar von den anderen beiden in der Quelle - unerreichbar, ununterstützt, rein useState, i18n in 22 Sprachen übersetzt und soll fertiggestellt werden. Eine wird aufgegeben und einer ist der nächste auf der Roadmap, und nur der Produktinhaber wusste, welche. Taxonomie 193/130/33/30 wird 190/129/32/29, 61 Wurzeln. Alle vier Zahlen bewegen sich: eine standalone, eine Wurzel, die ihr einziges Kind verliert, und dieses Kind. Ids 0, 1 und 2 werden verbrannt. Beachten Sie, dass 0 eine echte ID ist - VIEW_DASHBOARD war der erste rechts jemals erklärt - so dass jede Prädikat, die diese berührt müssen Null enthalten als auf Wahrhaftigkeit stützen.
· kamo-internal
App-Symbole auf dem Assistenten Apps & Features Schritt
Der create-network Assistent zeichnete jede App als den ersten Buchstaben seines Namens, so dass die Die gleiche App war ein Schaufenster auf Einstellungen -- Features und ein "S" hier. Die Symbole Es gab sie bereits -- sie wurden innerhalb der lokalen IconMap von FeaturesManager gesperrt. Verschiebet, dass Tisch zu ************ Schlüssel von ServiceType, und richtete beide Oberflächen darauf, so dass sie nicht driften können. Die beiden hinzugefügt Apps der Features-Bildschirm hatte nie Einträge für (CALCULATOR nimmt die neigene Schiene Berechnen, FEED nimmt DynamicFeed), die veraltet-Namen Aliasnamen, und ein App-Grid fallback -- gleiche Form wie nav/settingsTopicIcons.ts. Jede Glyphe ist flach var(-color-primary) ob die App eingeschaltet oder ausgeschaltet ist: zwanzig Produkte, die jeder in seiner eigenen Farbe ankommen, würde sich als Lösegeld lesen. On/Aus bleibt mit der Fliesenfarbe und dem Schalter. Der Wachtest versagt im Build, wenn ein Live-ServiceType kein Icon hat -- sonst neu katalogisierte App Schiffe als anonyme graue Quadrat und nichts beschwert sich.
· kamo-internal
Auch ein einfarbiges Overlay für das Ladebildschirm-Logo
Fügt "Loading Screen Logo Overlay" direkt unter der Startseite eins auf ************ mit den gleichen dreizehn Optionen, Anwendung auf das Logo auf dem Bildschirm zwischen Seitennavigierungen angezeigt. Default Kein Overlay, also ändert sich nichts für ein Org, das nie das Feld öffnet. Seine eigene Einstellung anstatt eine mit der Homepage geteilt, weil die beiden Oberflächen haben gegensätzliche Hintergründe: einen weißen Mastkopf und einen dunklen Farbverlauf. Der Schatten, der auf dem einen liest, ist selten der Schatten, der auf dem anderen liest, und eine einzige Einstellung würde eine Wahl erzwingen, die irgendwo falsch ist. Die Hinweis unter jedem sagt so. Der Typ ist jetzt LogoOverlay, nicht HomeLogoOverlay - er regelt zwei Oberflächen, und ein Typ, der nach einem von ihnen benannt ist, würde beide innerhalb einer Woche falsch beschreiben. Die Wortschatz, der Resolver und die Optionsliste werden gemeinsam; nur die Spalte Jede Oberfläche liest ist anders, so dass die Farben nicht auseinander driften. load.tsx liest OrgContext direkt und nicht durch das Werfen Haken: es steigt während der Navigation und darf nie das Ding sein, das eine bricht Seitenübergang. Ein fehlender Org bedeutet kein Overlay, das der Standard ist sowieso. Die beiden Lesereihen geben sich eine identische Form, so dass sie sich jetzt eine teilen Helfer statt mit jeweils einem Exemplar. Benötigt die geladene_logo_overlay-Spalte (KamoInitializer, angewendet) und SecurityService gegen die Shared-lib-Einheit umgebaut.
· InitializerService
Die Spalte laden_logo_overlay hinzufügen
Zweite Oberfläche für das Logo-Lay-Funktion: der Ladebildschirm angezeigt zwischen den Seitennavigschen, neben der Homepage masthead. Beide ALTER leben in einem Läufer, weil sie ein Feature mit einem sind Wortschatz, und jemand, der für beides sucht, sollte beides finden. Gleiche Form wie seine Geschwister - nullbar, keine Nachfüllung, kein DEFAULT, da ein abwesender Wert und Eines bedeutet für jeden Kunden das Gleiche. Der Drift-Guard itimiert nun die Überlandfelder des Enteners statt der Namensgebung Eins, so dass eine dritte Oberfläche dem Enteren ohne einen ALTER nicht hinzugefügt werden kann. Es auch pins eine Aussage pro Spalte: eine einzelne geteilte ALTER würde ruhig Lassen Sie die andere Spalte ungeschaffen.
· kamo-shared-library
Tragen Sie das Ladebildschirm-Logo-Lay auf Organisation
Das gleiche Overlay-Vokular wie homeLogoOverlay, angewendet statt auf das Logo auf dem Ladebildschirm zwischen den Seitennavigationen, plus Zweig in der generische Patch-Pfad. Eine eigene Kolonne und nicht eine gemeinsame Einstellung, weil die beiden Oberflächen haben gegensätzliche Hintergründe: der Homepage-Mastenkopf ist weiß und der Ladebildschirm ist ein dunkler Gradient, so dass der Schatten, der auf einem liest ist selten der Schatten, der auf der anderen liest. Eine Org, die beide will zwei Antworten. Null löst auf den Client NONE, so dass jede bestehende org beginnt mit nein Overlay und braucht keine Verfüllung. Die geladene_logo_overlay-Spalte ist bereits angewendet (KamoInitializer, OrgHomeLogoOverlayMigration).
· kamo-internal
Wählen Sie den zugewiesenen Agenten aus dem Verzeichnis, nicht ein Dropdown
Das Feld der zugewiesenen Agenten ist nun die gleiche Kontrolle wie Manager auf das eines Mitglieds Profil: ein Nur-Lesefeld, das den durchsuchbaren Mitglieds-Picker öffnet. Ein Rückgang konnte immer nur eine Seite halten, und die Liste hinter dieser wurde ganz geladen jede Bleiansicht, ob jemand die Karte geöffnet hat . zwei Verzeichnisse holt pro Seitenlast, von denen eine seit dem letzten Besitzerwechsel des Feldes tot war. Förderfähigkeit ist unverändert in der Substanz und besser durchgesetzt: der Picker fragt die Verzeichnis für Inhaber von VIEW_LEADS, das das gleiche Recht ist der alte Endpunkt aufgelöst, und es bleibt auf Teammitglieder, weil das der Standard-Bereich ist. Die "Halten Sie den aktuellen Empfänger wählbar" Sonderfall ist mit dem Dropdown gegangen der Picker pins die aktuelle Pick über den Ergebnissen, so dass es eine Suche überlebt anstatt eine handgemachte Option zu benötigen. Die Unzutrittsvergabe funktioniert jetzt. Die leere Option gab es immer, aber der Patch brach zusammen es zu undefiniert, welche BuildUpdateLeadRequest überspringt, so wählen Sie es gesendet ein leeres Pflaster und das Blei behielt seinen Besitzer. Der Picker's Remove sendet die leere ID der Server liest sich nun als expliziter Unsign.
· SecurityService
Schmen Sie die Mitgliedersuche für Inhaber eines gegebenen Rechtes
Der Lead-Zuweisung-Picker benötigt das Verzeichnis, um nur Leute zurückzugeben, die tatsächlich eine Führung arbeiten, so /team-members/search nimmt eine requiredRight. Eine unerkannter Name ist ein 400 statt ein ignorierter Parameter: leise fallen ein Filter erweitert die Berechtigungsgrenze, was der falsche Weg ist. Ein Recht Niemand hält eine leere Seite zurück, ohne zu fragen, da die Alternative ist eine leere IN-Liste der Datenbank wird nicht parsen. Wer ein Recht hat, zieht in RightHolderResolver ein, dem das Vermächtnis assignable-members endpoint verwendet jetzt auch. Der Spaziergang wurde bereits über kopiert fünf Call-Sites und die beiden Lead-Assignment-Sites müssen sich einigen, wer kann einen Vorsprung erhalten - besser, dass sie zustimmen, indem sie die gleiche Frage stellen, als passiert, um den gleichen Code heute zu halten. Die restlichen drei sind unberührt.
· kamo-shared-library
Lassen Sie das Verzeichnis durch rechts filtern und lassen Sie eine Leitung nicht zussignieren
Zwei Dinge, die der Einsatz-Picker braucht. Die Verzeichnisabfragen nehmen eine erlaubte-id-Sit, so dass ein Anrufer die Suche eingrenzen kann den Menschen kann eine Sache tatsächlich gegeben werden, um eine Leine zu jemand ohne VIEW_LEADS parkt es dort, wo sie es nicht öffnen können. Das Set wird in berechnet Java und nicht hier verbunden, weil ein Recht entweder von einer Rechte-Reihe gehalten wird oder durch eine Grant-all-Rolle, und die zweite hat keine Reihe zu finden. Es reist mit einem uneingeschränkte Flagge und ist nie leer: IN () ist ein Syntaxfehler auf den Postgres Draht, so dass die ganze-Verzeichnis Fall geht ein Platzhalter statt nichts. Und updateLead liest jetzt eine abwesende assignee id und eine leere als anders Anfragen, wie es bereits für Land und Sprache tut. Ein Pflaster trägt nur die Felder, die es bedeutet, zu ändern, so dass ohne diese Unterscheidung gab es keine Weise zu sagen "niemand besitzt diese Leine" - die leere Schnur fiel durch die gleiche als fehlendes Feld und das Unvermeid taten still nichts. Die offene Zuweisungszeile wird geschlossen und nicht ersetzt, da eine LeadAssignment immer geschlossen wird ein Mitglied benennt und es gibt keinen Namen mehr.
· kamo-internal
Die Herausgeber sagen "Enforced as MANAGE_TIMECARDS" statt "noch nicht durchgesetzt"
Ein Chip trug zwei verschiedene Wahrheiten und führte in entgegengesetzte Richtungen. Ungebaut bedeutet, dass nichts das Recht prüft und es nichts zu gewähren. Übersorgt bedeutet, dass die Fähigkeit real und gated ist, unter dem Namen eines anderen Rechts - Gewährung dieser man tut immer noch nichts, aber es zu löschen wäre falsch und der Administrator braucht zu wissen, welches Recht zu gewähren, anstatt zu wissen. Die vier Einträge sind es, die das Audit erstellt hat: VIEW_SCHEDULES und MANAGE_SCHEDULES unter MANAGE_TIMECARDS, weil sich der Teilnehmer-Tab unter der Registerkarte für die Aufmerksamkeit geöffnet hat VIEW_SCHEDULES und jeder HR-Tab erhielt später ein eigenes Recht; CREATE_EMPLOYEES und DELETE_EMPLOYEES unter MANAGE_MEMBERS, da ein Mitarbeiter ein Mitglied mit einem Beschäftigung Rekord und es gibt keinen Mitarbeiter CRUD Endpunkt. Die Liste ist von Hand-kuratiert, im Gegensatz zu der generierten, die sie kommentiert, und zwar absichtlich: kein Analyser kann "supersed" von "niemand gebaut es noch" sagen. Mitgliedschaft nicht Entfernen Sie ein Recht von UNENFORCED_RIGHTS - nichts geht es an eine Überprüfung in beide Richtungen - so Die Paritätsprüfung mit dem engagierten Audit ist unangetastet. Zwei Wachen verhindern, dass die Anmerkung zu einem abgestandenen Kommentar verrottet. Ein Recht, das ist wirklich erzwungen kann nie als verflüssigt, die zwei setzen würde Widersprüchliche Chips auf einem Schalter. Und das Deckungsrecht darf nicht selbst sein Dekorativ: die Botschaft ist "Grant X instead", so dass ein totes X senden würde die Administrator einen Schritt weiter von einer Arbeitserlaubnis. Das hat sich gelohnt, bevor die nächste HR-Rechtsseite landet. Zwei dieser vier waren einer überprüfen weg von während der Prüfung gelöscht, gerade weil der Editor sagte Sie waren tot.
· kamo-shared-library
Tragen Sie die Homepage Logo-Verlegung auf Organisation
Die feste Farbe und Org kann das Mastkopf-Logo auf der kamo-interne Homepage, plus seine Zweige in der generischen Patch-Pfad, so dass die bestehende PUT /org/{id' besteht neben bgWatermark. Speichert ein Token - PRIMARY_DARKER, nicht 004ba0 - gegen diese org's gelöst eigene Farben zur Renderzeit, also ein Org, das spätere Rebrands ein Overlay behält dass immer noch anstelle einer Hex gefroren, wenn jemand es gepflückt. Schlicht String statt eines enum, so dass ein zukünftiger Token keine CHECK-Beschränkung braucht Sweep. Null löst auf den Client auf NONE, weshalb jeder bestehende org beginnt ohne Overlay und benötigt keine Verfüllung. Die eingeloggte Spalte home_logo_overlay ist bereits angewendet (KamoInitializer, OrgHomeLogoOverlayMigration) Dieses Feld ordnet eine Spalte ab, die existiert, nicht ein Dienst wird in einen Abfragefehler eingreifen.
· InitializerService
Fügen Sie die home_logo_overlay-Spalte hinzu
Unterstützt die Home Page Logo Overlay Einstellung: die feste Farbe eine Org Dose das Mastkopf-Logo auf der kamo-internen Homepage aufblättern. Hält ein Token statt einer Hex, so dass das Overlay gegen die löst orgs eigene Palette zur Zeit und überlebt eine Rebrand. Einfache VARCHAR anstatt eines enum, so dass ein späteres Token keine CHECK-Beschränkung Sweep braucht. Null, keine Verfüllung, kein DEFAULT: Jeder Kunde löst einen abwesenden Wert zu NONE, das ist genau das, was jeder Org vor der Spalte aussah existierte, so dass eine Backfill Zeilen für keine Änderung im Verhalten schreiben würde. @Order(0) pro Spalte-Add-Konvention - der Moment der Shared-lib Entität bildet diese Spalte ab, jeder spätere Läufer, der eine Organisation lädt durch JPA emittiert es in seinem SELECT, so dass eine spät angeordnete Migration wäre getreten von einem Läufer sterben zuerst. Der Test ist ein Drift-Guer, kein Gerätetest: Dienstleistungen laufen ddl-auto: keine, so ein Entitätsfeld ohne passende ALTER beginnt gesund und stirbt an Abfragezeit - und für die Organisation, das bedeutet, org Auflösung, Login und Branding auf der anderen Seite der Plattform. Das macht es stattdessen zu einem Bauversagen.
· kamo-internal
Lassen Sie eine org malen die Homepage Logo eine feste Farbe
Fügt "Home Page Logo Overlay" zu Branding auf ************ direkt über Hintergrund Wasserzeichen: Kein Overlay, Weiß, Schwarz und jeder Schritt der Org Primär- und sekundäre Rampen. Setzen Sie es und das masthead-Logo oben links der Homepage macht sich als feste Silhouette in dieser Farbe. Default ist Kein Overlay, also ändert sich nichts für ein Org, das nie das Feld öffnet. Gespeichert wird ein TOKEN, kein Hex - PRIMARY_DARKER, nie #004ba0 gegen die Org-Palette zum Zeitpunkt der Rendering-Zeit gelöst. Eine Org, die Rebrands hält ein Overlay, das immer noch zu seinen Farben passt, statt einer Hex eingefroren im Moment jemand wählte es aus einem Dropdown. logoOverlay.ts besitzt dass der Wortschatz und die Auflösung, die gleiche Weise watermark.ts besitzt die Wasserzeichen. Drei wissenswürdige Details: - Die dunklen Schattierungen existierten bereits auf dem Draht. Das Backend hat alle geschickt fünf Schritte von jeder Rampe so lange wie EmbColorPalette hat, aber Organization.fromJSON nur jemals drei abgebildet, so colorDark/colorDarker fiel auf den Boden hier. Sie werden jetzt getragen, das ist, was gibt die dunklere Tokens eine Farbe zu lösen. - ThemeLogo macht dies mit einer CSS-Maske, nicht mit einem Filter. Ein Filter kann nur die vorhandenen Farben herumschieben und ein beliebiges Ziel nicht erreichen können, so das Logo eigene Alpha wird eine Maske und die Farbe ist gemalt dahinter. Das <img" bleibt montiert und nur unsichtbar: es ist das einzige Quelle der naturalSize der Sizing-Block hängt davon ab, und es hält Besetzen seiner genauen normalen Box, so dass die maskierte Schicht kann es füllen. Anrufer die keine OverlayColor bucht äh-identisch zu vor. - Ein Markenzeichen, dessen Schatten die org nie gesetzt löst kein Overlay anstatt in einen benachbarten Schatten zurückzufallen. Sehen Sie das Logo Sie hatte schon Beats, die eine Farbe sehen, die niemand wählte. Benötigt die eingespaltene (KamoInitializer, angewendet) und eine SecurityService gegen die Shared-lib-Einheit wieder aufgebaut; bis diese landet das Feld liest und speichert als No Overlay statt Fehler.
· InitializerService
VIEW_EMAIL_LOGS-Zeilen säubern und einen Testrott stoppen, wenn Ordinals verschieben
VIEW_EMAIL_LOGS (64) wurde heute von RoleRightType gelöscht, weil er eine Funktion benannt hat, wurde nie gebaut. Dies entfernt, was es hinter sich gelassen hat - gemessen an 42 Rollenreihen, 33 Angelage-Zeilen und 8 Vorlagenzeilen - über beide Kodierungen hinweg, da die Vorlagentabelle speichert das enum NAME, während der Rest die Integer-ID speichert. **************** musste in der gleichen Änderung fixiert werden, und die Vernunft ist es wert, gehalten zu werden. Es behauptete sein Beispiel Recht hatte id != ordinal, bewacht von "Test ist nur sinnvoll, während", dass hält. Entfernen id 64 verschoben jeden später ordinal, ************ id wurde seinem Ordinal und dem Wache gefeuert. Wäre die Wache nicht da gewesen, hätte der Test weiter bestanden, während Nichts beweisen, was das schlechtere Ergebnis ist. Es wählt jetzt seinen Zeugen bei der Laufzeit - jedes Recht, das einen Vorfahren hat und dessen id unterscheidet sich von seinem ordinalen - so kann keine zukünftige Löschung ruhig aushöhlen. Löschen Rechte sind jetzt Routine genug, dass ein hart codiertes Beispiel eine Haftung ist.
· kamo-shared-library
Löschen Sie VIEW_EMAIL_LOGS, die eine Funktion, die niemand gebaut benennt
Kein E-Mail-Log existiert irgendwo in der Plattform: keine Tabelle in einem Schema, kein Endpunkt unter den 21 Controllern von EmailService, keine Benutzeroberfläche und keine Referenz im Frontend sogar die checkRight, die MANAGE_EMAIL_ACCOUNTS zumindest hatte. Die Plattform tut Modellprotokolle, wo es sie hat, mit phone_call_log, img_log_downloads, phi_access_log und contact_sync_logs alle vorhanden; E-Mail hat keinen entsprechenden. Das ist der CREATE_CHANNELS-Fall - das Substantiv existiert nicht - und nicht MANAGE_MEETINGS Fall, in dem das Substantiv modelliert wird und nur das Verb nicht exponiert ist. Taxonomie 194/131/33/30 wird 193/130/33/30. Nur das Kind zählt sich: ACCESS_MAIL behält seine vier anderen Kinder, so bleibt es eine Root-with-childer. Id 64 ist verbrannt. Gespeicherte Zeilen werden von EmailLogsRightPurgeMigration entfernt.
· kamo-internal
Setzen Sie den Hinweis Komponist an der Spitze der All Communications
Der Komponist existierte nur auf den Notes Sub-Tab, so schreiben Sie eine Notiz über was Sie gelesen bedeutete, die Registerkarte zu verlassen, auf der Sie es lasen. Alle trägt jetzt die gleiche PostComposer - gleiche Blei, gleiche org-sichtbare Note . und die Zeitleiste darunter renoviert seine neueste Seite an Ort und Stelle, wenn man landet, halten die Reihen auf dem Bildschirm statt blinken zurück zu einem Spinner.
· kamo-internal
Wählen Sie die neuen org Apps während der Erstellung
Fügt einen Apps & Features Schritt zwischen Typ und Grundlagen. Es listet die Apps die Das Sicherheitsmodell des gewählten Zweigtyps bietet tatsächlich -- die erzwungenen als "Immer in Mitsprache" ohne Schalter zu streiten, die optionalen als schaltet voreingestellt auf den eigenen Standard des Modells um -- und sendet die Antworten mit die Schaffung. Typ ist, was entscheidet, welche Apps existieren, um zu wählen, so dass der Schritt sitzt rechts danach. Fragen "was wird dieses Geschäft tatsächlich tun", während das ist noch der Betreff kostet den Kunden nichts; fragen Sie es nach acht Bildschirmen von Branding würde sich als zweites, unzusammenhängendes Setup lesen. Geschrieben für jemanden, der die Plattform noch nie benutzt hat: der Header erklärt was eine App ist und dass das Ausschalten nur versteckt es, jede Zeile trägt die eigene Klartext-Beschreibung der App, "Normalerweise eingeschaltet"/" Normalerweise aus", sagt wo die Vorauswahl kam, und es gibt einen Weg zurück zu der empfohlenen Satz. Hier ist nichts erforderlich und Review listet die Apps der org wird mit Namen öffnen -- eine Zählung ist eine Zahl, die niemand überprüfen kann, und dies ist der letzte Bildschirm vor einer irreversiblen erstellen. Auswahlen werden durch ServiceType-Namen eingegeben und ein abwesender Schlüssel bedeutet "was auch immer das Modell empfiehlt", auf beiden Seiten des Drahtes. Wiederwahl des SAME Zweigtyp behält die Antworten, anstatt Standardeinstellungen wieder aufzubauen: BranchTypeStep Wiedereinwählt jedes Mal, wenn dieser Schritt wieder aufgegriffen wird, so dass die naive Version würde stillschweigend rückgängig machen den ganzen Schritt von einem Klick auf den Schritt vor es. Die Auswahl eines anderen Typs baut wieder auf, weil die App-Liste ersetzt wird Großhandel. Schließt auch die App-Beschreibung auf Einstellungen -- Konto -- Zweig Typen zu zwei Linien. Die Beschreibungen, die diese Zeilen zeigen, laufen jetzt auf ein paar Sätze, so ein nicht-technische Leser können auf sie zu handeln, und unclamped sie drehen jede zusammengebrochen Reihe in einen Drei-Linien-Block.
· SecurityService
Lassen Sie den Schöpfer wählen Sie die neuen org Apps
Der Netzwerk-Erzeuger-Assistenten gewinnt einen Apps & Features-Schritt, und das ist die halb so macht es echt. /branch-types/creatable beschreibt jetzt die Apps die Sicherheit jedes Zweigtyps Modell bietet -- erzwungene als "erforderlich", OPTIONAL_* diejenigen mit dem Modell .- ist die Standardeinstellung -- so kann der Assistent den Schritt gerendern, bevor die org existiert. Es von hier: Die Endpunkte, die Apps beschreiben, sind auf ein bestehende org und gated auf CONFIGURE_SYSTEM, ein Recht der Person, die eine Zweig hält häufig nicht in der Eltern oder org. NOT_AVAILABLE Apps sind Ausgelassen völlig statt gezeigt ausgegraut. Die create payload gewinnt .appSelections" ({ServiceType: boolean]), und neu org wird von ihm in der erstellen Transaktion zur Verfügung gestellt, neben der Rollenvorwurf-Saätung: gleiche Art von Sache, und entweder alles landet oder die org ist nicht geschaffen. Der Teil, der zweimal gelesen werden kann, ist, dass eine App, die OFF gewechselt wird, immer noch ein OrgFeature Reihe. Bis jetzt hat eine neue org überhaupt keine Feature-Reihen und sie waren träge das erste Mal, wenn jemand Einstellungen öffnete - Apps -- eine Schleife die alles ermöglicht, was das Modell nicht gerade blockiert. Also OPTIONAL_DEFAULT_DISABLED, ein Admin, der das explizit sagt: "biege dies, aber beginne it off", wurde still zu ON für jedes Kind Org jemals geschaffen gefördert. Das Schreiben einer inaktiven Zeile ist, was die Wahl Stick macht, weil diese Schleife erzeugt nur Zeilen für Typen, für die es keine findet. Es ist auch, warum dies nicht sein kann ein Best-Wieder-Commit-Schritt: Der Fallback würde die Apps nicht ungeeignet lassen, es würde sie auf das Gegenteil von dem, was der Schöpfer gebeten verlassen. Bewusst eng an drei Stellen. Ein Org ohne aufgetragenes Modell bleibt übrig die faule Pfad -- computeAvailabilitiesMap antwortet OPTIONAL_DEFAULT_DISABLED für alles, was dort ist, und Material, das jemandem einen Arbeitsplatz geben würde wo nichts an ist und nichts sagt, warum. Eine Auswahl, die eine App benennt Modell bietet nicht ignoriert wird, nicht abgelehnt: der Assistent hält seinen Entwurf in Sitzungsspeicher, so dass ein Admin Verengung des Modells Mitte der Sitzung darf nicht kosten Kunden ihre erstellen. Und eine Null-AppSelections ist nicht "keine Apps" -- es ist ein ältere Client, und jede App fällt zurück auf die Modell-Standard.
· kamo-shared-library
Neu schreiben Sie die App-Katalog-Kopie für die Menschen, die es lesen
Der Anzeige Name und die Beschreibung auf ServiceType sind die einzige Beschreibung von eine App, die die meisten Leute jemals sehen: ein Org-Admin auf Einstellungen - Apps & Features, ein parent-org-Admin entscheidet, was seine Kinder-Orgs auf den Zweig-Typen verwenden dürfen Bildschirm, und jetzt wer auch immer eine Organisation im Netzwerk-Assistenten erstellt -- jemand, der die Plattform in der Regel noch nie benutzt hat. Zwei Dinge waren falsch mit dieser Kopie, und beide kosten Kunden. Er beschrieb die Umsetzung. "AI-powered assistant with chat, RAG integration", "Voice Over IP PBX Phone System", "Selbst gehostetes Video conferencing", "Persönliche Dokumentenspeicherung mit Docs-Bearbeitung", "Falls zurück zur Elternorganisation SMTP, wenn deaktiviert" -- genau zu einem Ingenieur, und keine Hilfe für einen Unternehmer zu entscheiden, ob sie das Ding wollen. Schlimmer noch, es präsentiert Kamo eigene Umsetzung als die gesamte App. E-Mail, Telefon und Meetings sind jeweils eine Anbieterabstraktion -- EmailProviderType, VoipProviderType und MeetingProviderType liefern je einen Kamo-Anbieter weiter Google Workspace / Microsoft 365 / Zoho / Exchange / IMAP, RingCentral und Teams Telefon, Zoom und Teams. "E-Mail - E-Mail Hosting" lautet wie "tick this wenn Sie möchten, dass Kamo Ihre Mail hostet", also jeder org bereits auf Workspace oder 365 hatte einen Grund, eine App für genau sie zu dedieren. Auch füllt zwei echte Lücken die Kopie nie erwähnt: HR besitzt die rechtlichen und Offenlegungsdokumente Mitarbeiter müssen lesen und unterschreiben, und Marketing sendet Bulk und tropfen E-Mail-Kampagnen. ServiceTypeCustomerCopyTest pins beide Fehler, so dass sie nicht wieder kommen können. Ständige Namen sind unberührt -- **************** beharrt der Name als String, so dass ein Umbenennung stillschweigend jeden umwidmen würde Zuschüsse des Sicherheitsmodells.
· kamo-internal
Kürzen Sie die nerv Labels zu Chancen und Krediten
· SecurityService
Schützen Sie Gotteskonten auf der Plattform-Administratoren-Liste
Die Plattformrechte eines Gotteskontos dürfen nur von einem anderen Gott und einem Gott geändert werden. Konto kann nie von jedermann entfernt werden, einschließlich eines anderen Gottes. Gott ist die Break-Glas-Identität der Plattform: Ihre Halter sind, was bleibt, wenn Alles andere ist falsch konfiguriert worden. Ein Administrator Holding MANAGE_PLATFORM_ADMINS aber nicht Gott könnte sonst in ein Gotteskonto greifen und seine Rechte wegnehmen, das ist genau die Bearbeitung, die die Menschen entwaffnen würde in der Lage, es rückgängig zu machen. Entfernung ist absolut, weil die Zeile weg Streifen jeder gleich - jederzeit; der Wechsel der Rechte bleibt möglich, aber nur zwischen Gleichaltrigen. Der Peerage-Test ist User.isGod auf dem Anrufer, nicht ein offenes God-Mode-Fenster: Sein Gott ist das, was macht Sie das Ziel gleich hier, während das Fenster ist über Diese Macht absichtlich an anderer Stelle einsetzen. isGod(Mitglied) scheitert geschlossen in der Schutzrichtung - ein Mitglied, dessen Benutzer Aufzeichnung kann nicht gelesen werden, wird wie Gott behandelt, so dass eine unlesbare Zeile in Ruhe gelassen wird anstatt auf die Stärke einer Suche bearbeitet, die nicht funktioniert hat. Der Anrufer Eigene Flagge versagt in die andere Richtung, da es immer nur Kontrollen ermöglicht. Bezieht sich auf alle drei Schreibpfade, einschließlich der Add Endpoint, die ersetzt Rechte auf einen erneuten Zusatz und wäre sonst ein Weg um die Regel herum.
· kamo-internal
Gotteskonten sind auf der Plattform Admins Liste geschützt
Zwei Regeln der Server durchsetzt und dies spiegelt nur: die Plattform eines Gotteskontos Rechte können von einem anderen Gott und niemand anderem geändert werden, und ein Gotteskonto kann nie von einem anderen Gott entfernt werden, nicht von sich selbst. Gott ist die Break-Glass-Identität, so dass seine Halter sind der letzte Weg zurück in, wenn Alles andere ist falsch konfiguriert worden. Eine Verwalter-Holding MANAGE_PLATFORM_ADMINS aber nicht Gott könnte sonst in ein Gotteskonto greifen und Strip es, das ist die eine Bearbeitung, die die Menschen, die es rückgängig machen würde entwaffnet. Beide Kontrollen sind mit dem Grund angehängt deaktiviert, anstatt versteckt. Kontrolle, die verschwindet liest sich als eine fehlende Funktion, eine, die sich erklärt liest liest in der Regel. Der "+N more"-Chip trägt das gleiche Schloss, da er das gleiche öffnet Dialog.
· SecurityService
Backen Sie die org Hintergrund-Bestellung in config.json
Kamo-Login, Kamo-register, die Marketing-Website und KamoMeet lesen alle die Thema Eimer config.json für backgroundImageCount; backgroundOrder now Fahrten daneben, so dass die org-weite sequentielle / Shuffle Wahl erreicht alle vier zum nächsten Thema. Nur die beiden bekannten Werte werden emittiert - alles andere wird weggelassen, so dass die Client fällt zurück auf sequentielle anstatt einen Wert zu lesen, den er nicht tut zu erkennen. Die org PUT lehnt einen unerkannten Wert vollständig ab.
· kamo-shared-library
Hintergrund_order-Kolumne für die öffentliche Diashow-Aufstellung
Nullable VARCHAR; Null löst auf sequenzielle auf jeden Kunden, die ist was jede Org hatte, bevor die Spalte existierte. Plain String statt eines enum so ein späterer Modus braucht nicht eine CHECK-Beschränkung Sweep. Der spiegelnde ALTER wurde bereits durch KamoInitializer und die Spalte ist in Yugabyte bestätigt, so dass dies nicht bewaffnet ist.
· InitializerService
Säubern Sie die gespeicherten Zeilen für die beiden Rentenbriefrechte
SHARE_NOTES (72) und MANAGE_NOTES_SETTINGS (73) wurden von RoleRightType gelöscht heute für die keine Funktion zu Gate. Dies entfernt, was sie hinter sich gelassen, gezählt und loggte sich im gleichen Lauf anstatt links für RoleRightsSyncService zu fegen leise auf einem späteren SecurityService Boot. Vor dem Schreiben gemessen: 84 Zeilen über die Rollentabellen, 16 Vorlagenreihen, 94 angewandte Zeilen, keine auf Abteilungs-, Job-Titel- oder Mitgliederebene. Beide Codierungen wieder. Die Rechte-Tabellen und der angewandte Schnappschuss speichern die Integer id; **************** speichert das enum NAME. Eins id-keyed DELETE würde nichts auf der Vorlagentabelle entsprechen und berichten Erfolg, 16 Zeilen für Rechte, die nicht mehr in die Kraft-Regel eingelesen werden Karte auf jeder Neuberechnung - was nicht hypothetisch ist, es ist, was passiert ist 24 von den 150 Zeilen sollte die Chat-Kanal-Säuberung entfernt werden. Keine Aussaat und kein Verifikationstor, im Gegensatz zum Meet-Samen: Ein Recht löschen kann nicht Entfernen Sie den Zugang von irgendjemandem, weil diese nie gelesen werden. Das ist es, was sie gemacht hat Deletable in erster Linie.
· kamo-shared-library
Löschen Sie SHARE_NOTES und MANAGE_NOTES_SETTINGS, die nichts benennen
Die Notizen sind echt, und ab heute vollständig gated - VIEW, CREATE, EDIT und DELETE sind Erpressung auf jedem Endpunkt des KBService NotesController. Diese beiden hatten nichts zu nennen. Es gibt keine gemeinsame Nutzung nach dem Vorbild der Plattform: keine Spalte auf Hinweis, kein Feld auf NoteDTO, no note_shares Tabelle - die Notentabellen sind Notizen, note_tags, note_versions und note_embedding_records - kein Endpunkt unter den zehn und keine Benutzeroberfläche. Die drei "Share"-Hits in FloatingNote.tsx sind prose und die im Dienst sind der Paketname com.kamo.z.shared. Die Architektur weist auf die gleiche Weise: ein Hinweis Inhaltsschlüssel ist von seinem Besitzer abgeleitet, so teilen man ist eine Re-Keying Problem und nicht ein fehlender Endpunkt. MANAGE_NOTES_SETTINGS hat auch keine Einstellungen Oberfläche entweder - keine Registerkarte unter Einstellungen/Funktionen, keine Route unter App/Einstellungen, keine Konfigurationstabelle, keine Konfigurationseinheit, kein Hinweis irgendwo im Frontend. Dies ist der CREATE_CHANNELS Fall, bei dem das Substantiv nicht existiert, und absichtlich nicht der MANAGE_MEETINGS Fall gehalten letzte Woche, wo das Substantiv modelliert ist MeetingStatus hat bereits CANCELLED und ENDED, und WebinarService fährt sowohl - als auch nur das Verb ist unbelichtet. Der Test, der die Taxonomie festicht, trägt die Argumentation. Taxonomie 196/132/33/31 wird 194/131/33/30, 63 Wurzeln. Zwei Zahlen bewegen sich eher als drei: SHARE_NOTES war eines der vier Kinder von VIEW_NOTES, also bleibt VIEW_NOTES root-with-children, anstatt so zusammenzubrechen, wie ACCESS_CHAT es tat. Ids 72-73 sind verbrannt. RoleRightTypeIdConverter beharrt auf der id, also ein zukünftiges Recht Wiederverwendung würde man erben, was diese Reihen in den Orgs, die sie hatten eingeschaltet. Gespeicherte Zeilen werden durch NotesRightsPurgeMigration entfernt.
· InitializerService
hinzufügen orgs.background_order
Nullable VARCHAR(20), keine Backfill und kein DEFAULT - jeder Kunde löst ein abwesender Wert auf sequenzielle, das ist das Verhalten, das jede Org hatte bevor die Spalte existierte. @Order(0) pro Spalte-Add-Konvention: einmal die Shared-lib Entität Karten es, jeder spätere Läufer, der eine Organisation lädt, sendet es in seinem SELECT aus.
· kamo-marketing
Lesen Sie die reale Hintergrundanzahl und Spielanordnung des Orgs
Der Held suchte nach bg/1.webp und dann drei Frames festcodierte, also ein Org mit mehr nie zeigte sie und die Rotation modul'd von LOCAL_BGS.length egal wie viele Bilder tatsächlich oben waren. Es liest jetzt config.json wie jede andere Kamo-Oberfläche und ehrt die Shuffle-Einstellung der Org.
· kamo-register
Ehrung der org's sequentiellen/shuffle Diashow-orden
Gleicher config.json-Vertrag als Kamo-Logo: HintergrundOrder fährt alle drei Registrierung Hintergrund, abwesenden Schlüssel bleibt sequentielle.
· kamo-login
Ehrung der org's sequentiellen/shuffle Diashow-orden
config.json führt nun Hintergrundbestellen neben backgroundImageCount. Shuffle re-randomises auf jeden Vorstoß und wiederholt nie den Rahmen auf Bildschirm; eine abwesende Schlüssel bleibt sequentiell, das ist, was jeder Org hatte. Die beiden Swiper-Bildschirme halten ihre Crossfade, sondern fahren ihre eigenen Zeiter wenn gemischt - Swiper Autoplay nur immer Schritte vorwärts eine Folie.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich