sgcHTML'in 25 yeni bileşenini ele alan bu serinin son yazısı. Her yönetim panelinin er ya da geç ihtiyaç duyduğu üç bileşenle kapatıyoruz: şu anda kimin çevrimiçi olduğu, kimin neyi yapmaya yetkili olduğu ve hesapları fiilen yönettiğiniz tablo. Üçü de, sohbet ve iş ilerleme ekranlarınızın zaten kullandığı aynı WebSocket kanalı üzerinden canlı güncellemeler gönderir; bu yüzden bu grup, önceki yazılardaki bileşenlerin hemen yanına oturuyor.
Presence — canlı bir çevrimiçi kullanıcı listesi
TsgcHTMLComponent_Presence, üst üste binen bir avatar yığını veya bir ad-ve-durum listesi olarak işlenir; MaxVisible ile sınırlandırılır ve fazlası "+N" taşma etiketiyle gösterilir. AddUser bir liste kaydını ekler ya da günceller, SetUserStatus yalnızca durum noktasını günceller ve GetUserFragmentHTML o tek değişikliği bağlı her istemciye iletir.
uses
sgcHTML_Component_Presence;
var
oPresence: TsgcHTMLComponent_Presence;
begin
oPresence := TsgcHTMLComponent_Presence.Create(nil);
try
oPresence.PresenceID := 'roster';
oPresence.Layout := plAvatars;
oPresence.MaxVisible := 5;
oPresence.Title := 'Online';
oPresence.AddUser('u1', 'Ana Torres', psOnline);
oPresence.AddUser('u2', 'Marc Bell', psAway, '', 'Back at 3pm');
oPresence.AddUser('u3', 'Kenji Ito', psBusy);
WebModule.Response := oPresence.HTML; // avatar stack + scoped CSS
finally
oPresence.Free;
end;
end;
// Push a status change to every connected client, no full re-render:
oPresence.SetUserStatus('u2', psOnline);
TsgcHTMX_Engine_Server.BroadcastFragment(oPresence.GetUserFragmentHTML('u2'));
RolesPermissions — onay kutularıyla dolu bir form değil, bir yetkilendirme matrisi
TsgcHTMLComponent_RolesPermissions, rolleri sütunlar, izinleri ise (kategoriye göre gruplanmış) satırlar olarak düzenler ve her kesişim noktasında bir onay kutusu bulunur. AddRole ve AddPermission bu iki ekseni oluşturur, SetGrant başlangıç hücrelerini işaretler ve istemci tarafındaki her değişiklik, işleyicinizin uygulamadan önce ProcessGrantChanged ile yetkilendirmesi gereken bir JSON yükü olarak sunucu tarafına ulaşır.
uses
sgcHTML_Enums, sgcHTML_Component_RolesPermissions;
var
oMatrix: TsgcHTMLComponent_RolesPermissions;
begin
oMatrix := TsgcHTMLComponent_RolesPermissions.Create(nil);
try
oMatrix.MatrixID := 'acl';
oMatrix.StickyHeader := True;
oMatrix.AddRole('admin', 'Administrator').Color := hcDanger;
oMatrix.AddRole('editor', 'Editor');
oMatrix.AddRole('viewer', 'Viewer');
oMatrix.AddPermission('users.edit', 'Edit users', 'Users');
oMatrix.AddPermission('users.delete', 'Delete users', 'Users');
oMatrix.AddPermission('billing.view', 'View invoices', 'Billing');
oMatrix.SetGrant('admin', 'users.edit', True);
oMatrix.SetGrant('admin', 'users.delete', True);
oMatrix.SetGrant('editor', 'users.edit', True);
WebModule.Response := oMatrix.HTML; // matrix table + inline script
finally
oMatrix.Free;
end;
end;
// Server-side handler for a checkbox toggle received over WebSockets.
// ALWAYS verify the acting user is authorized before applying the change:
oMatrix.ProcessGrantChanged('editor', 'users.delete', True);
UserManagement — hesap tablosunun kendisi
TsgcHTMLComponent_UserManagement, o rollerin atandığı tablodur: avatar, durum rozeti, rol rozetleri, son giriş, arama kutusu ve satır başına bir eylemler açılır menüsü (düzenle, devre dışı bırak/etkinleştir, parola sıfırla ve, tercih ederseniz, kimliğine bürün ve sil). AddUser bir satır ekler ve doldurmanız için bir TsgcHTMLUser döndürür; ProcessUserAction, bir satırın açılır menüsünün geri gönderdiği her şeyi, yine yalnızca kendi yetkilendirme denetiminizden sonra işler.
uses
sgcHTML_Component_UserManagement;
var
oUsers: TsgcHTMLComponent_UserManagement;
oUser: TsgcHTMLUser;
begin
oUsers := TsgcHTMLComponent_UserManagement.Create(nil);
try
oUsers.TableID := 'users';
oUsers.AllowImpersonate := True;
oUsers.AllowDelete := True;
oUser := oUsers.AddUser('u1', 'ana.torres', 'ana@example.com');
oUser.DisplayName := 'Ana Torres';
oUser.Roles := 'admin,editor';
oUser.Status := usActive;
oUser.LastLogin := '2026-07-15 09:12';
oUsers.AddUser('u2', 'marc.bell', 'marc@example.com').Status := usInvited;
WebModule.Response := oUsers.HTML; // toolbar + table + inline script
finally
oUsers.Free;
end;
end;
// Server-side handler for an action received over WebSockets.
// ALWAYS verify the acting user is authorized before applying it:
oUsers.ProcessUserAction('userDisable', 'u2');
RolesPermissions ve UserManagement'ta tekrarlanan bu deseni fark edin: bileşen yalnızca arayüzü işler ve bir olay yayınlar. Kendi sunucu taraflı kodunuz, işlemi yapan kullanıcının bu değişikliği yapmaya yetkili olduğuna karar verip ProcessGrantChanged veya ProcessUserAction'ı açıkça çağırana kadar hiçbir durum değişmez. Bileşen, tasarım gereği, sizin adınıza asla yetkilendirme yapmaz.
Serinin Sonu
Beş yazı boyunca yirmi beş bileşen: structured data (TreeGrid, PivotTable, ActivityFeed, Splitter), charts and codes (Heatmap, Sparkline, CandlestickChart, TreeMap, QRCode, Barcode), form inputs (MultiSelect, ColorPicker, Slider, TimePicker, SignaturePad, Transfer), feedback and layout (Badge, PDFViewer, ContextMenu, ProgressBar, JobProgress, LogViewer) ve bugünün üç yönetim bileşeni. Tam özellik matrisi artık dokuz aile genelinde 83 bileşen listeliyor ve her biri kendi sayfasında Delphi, C++Builder ve .NET için bir hızlı başlangıç ile belgelenmiş durumda: Presence, RolesPermissions ve UserManagement dahil.
Sorularınız, geri bildiriminiz mi var ya da geçiş konusunda yardıma mı ihtiyacınız var? Bize ulaşın — kodu yazan kişilerden bir yanıt alacaksınız.
