Üç Yeni sgcHTML Yönetim Bileşeni: Presence, RolesPermissions ve UserManagement | eSeGeCe Blog

Üç Yeni sgcHTML Yönetim Bileşeni: Presence, RolesPermissions ve UserManagement

· Bileşenler

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.