Informacje o wersji 1.14.2.0
z dn. 31-01-2025
W tej wersji
- Zupełnie nowa odsłona funkcjonalności zastępstw
- Sprawdzanie zgodności na poziomie baz danych w migratorze
- Optymalizacja akcji C#
Wymagane działania
- Nowe zastępstwa:
W ramach modyfikacji funkcji core.GetAllSubstitutions usunięto parametr LangId. W związku z tą zmianą zdefiniowane wywołania funkcji będą zwracać błąd. Wymagane jest usunięcie parametru z wywołania funkcji:
SELECT * FROM core.GetAllSubstitutions ()
Kompatybilność aplikacji
Migracja aplikacji jest możliwa tylko między wersjami nAxiom kompatybilnymi na poziomie bazy danych.
Bieżąca wersja bazy danych: 20250129124203
W tej wersji nAxiom struktura bazy danych zmieniła się. Przed migracją aplikacji do tej wersji wymagane jest zaktualizowanie środowiska źródłowego.
Nowe i zmodernizowane funkcje
1. Nowe zastępstwa
Gruntownie zmodernizowano funkcjonalność zastępstw, opierając ją na nowej mechanice pracy w kontekście wybranego użytkownika. Kiedy użytkownik podejmuje pracę w zastępstwie, system wysyła żądanie wystawienia nowego tokenu z identyfikatorem zastępowanego użytkownika. Jednak token zawiera teraz także atrybut NativeUserId, który odpowiada faktycznej tożsamości użytkownika. Obecnie parametr systemowy @_UserId określa kontekst pracy użytkownika, a nowy parametr @_NativeUserId - tożsamość użytkownika.
Zgodnie z parametrem UserId (oraz powiązanymi z nim rolami, rolami w jednostkach i przynależnością do grup interesariuszy) sprawdzane są uprawnienia ACL, PBA oraz dostęp do menu aplikacji i uprawnienia do akceptacji dokumentów.
Obecnie użytkownik, który podejmie pracę w zastępstwie, ma wyłącznie uprawnienia użytkownika zastępowanego, a zastępstwo obejmuje wszystkie role użytkownika zastępowanego.
- Definiowanie zastępstw
- Wymagane są odpowiednie uprawnienia PBA.
- Należy wskazać zastępowanego, zastępującego, datę rozpoczęcia (dowolna), datę zakończenia (bieżąca lub przyszła), status aktywne/nieaktywne.
- Nie można utworzyć zastępstwa za samego siebie ani za użytkownika z zablokowanym/nieaktywnym profilem.
- W przypadku użytkownika, którego profil wygasł, możliwość zdefiniowania zastępstwa zależy od nowego ustawienia systemowego (adminSPA).
- W przypadku dezaktywacji zastępstwa, którego okres się rozpoczął, wyświetlany jest komunikat z ostrzeżeniem. Jeśli zastępstwo dezaktywuje zastępujący podczas pracy w zastępstwie, nastąpi zakończenie pracy w zastępstwie. UWAGA: Dezaktywacja zastępstwa podczas pracy w zastępstwie powoduje, że znika oznaczenie pracy w trybie zastępstwa oraz przycisk do zakończenia pracy w zastępstwie. To zachowanie zostanie poprawione w przyszłości. Jednak w takim przypadku wartości UserId i NativeUserId pozostają różne.
- Możliwe jest wyznaczenie kilkorga zastępujących za jednego zastępowanego; jeden zastępujący może zastępować kilkoro zastępowanych (zawsze jako osobne zastępstwa).
- System nie weryfikuje, czy osoby wyznaczane jako zastępujący są obecne, ani czy definiowane zastępstwo nie jest zagnieżdżone (A za B za C) lub rekurencyjne (A za B i B za A). Zastępstwa są nieprzechodnie.
- Podejmowanie/kończenie pracy w zastępstwie
- Aby podjąć pracę w zastępstwie, należy rozwinąć menu profilu zalogowanego użytkownika i kliknąć przycisk
Rozpocznij
obok imienia i nazwiska osoby zastępowanej. - Aby zakończyć pracę w zastępstwie, należy kliknąć przycisk
Zakończ
w menu profilu użytkownika. - Praca w zastępstwie jest sygnalizowana dopiskiem
zastępstwo za: Imię Nazwisko
pod imieniem i nazwiskiem zalogowanego użytkownika. - Przy rozpoczynaniu i kończeniu pracy w zastępstwie jest wyświetlane potwierdzenie.
- Użytkownik może się wylogować podczas pracy w zastępstwie, co jest równoważne z zakończeniem pracy w zastępstwie.
- Podjęcie i zakończenie pracy w zastępstwie jest rejestrowane w audycie bezpieczeństwa (core.SecurityAudits, kategoria Permissions, typ zdarzenia UserIdentityChanged). Nie dotyczy to sytuacji, kiedy użytkownik wyloguje się podczas pracy w zastępstwie (zdarzenie wylogowania będzie rejestrowane w kolejnej wersji).
- Jeśli użytkownik ma przypisanych kilka zastępstw, może się przełączać między nimi bez konieczności kończenia pracy w zastępstwie.
- Aby podjąć pracę w zastępstwie, należy rozwinąć menu profilu zalogowanego użytkownika i kliknąć przycisk
- Praca w zastępstwie
- Jeśli audyt zdarzeń dla dokumentu biznesowego jest włączony, rejestrowane są informacje o użytkowniku który dokonał zmian oraz o tym, że pracował w zastępstwie i o osobie zastępowanej. W tabelach core.Audits, core.AudtitEventLogs i core.AuditEventLog dodano kolumnę NativeUserId. Jako wartości bilansu otwarcia dla nowej kolumny przyjęto wartości z kolumny UserId. Nie dotyczy to tabeli core.AuditLogs, której aktualizacja mogłaby powodować przekroczenie limitu czasu ze względu na dużą liczbę rekordów. W przypadku tej tabeli można po aktualizacji do nowej wersji uruchomić poniższy skrypt SQL.
UPDATE [core].[AuditLogs] SET [NativeUserProfileId] = [UserProfileId] WHERE [NativeUserProfileId] IS NULL
- W przypadku komentarzy do dokumentów biznesowych dodawanych podczas pracy w zastępstwie, obok imienia i nazwiska autora jest wyświetlana informacja o zastępstwie. W tabeli core.Comments dodano kolumnę NativeUserId. Jako wartości bilansu otwarcia dla nowej kolumny przyjęto wartości z kolumny UserId.
- W okresie aktywnego zastępstwa powiadomienia do użytkownika zastępowanego są kierowane także do użytkowników, którzy go zastępując (bez względu na to czy pracują w zastępstwie).
- Podczas pracy w zastępstwie czat jest wyłączony. Podczas pracy w normalnym trybie, przy próbie napisania wiadomości do użytkownika, który jest nieobecny, wyświetlana jest informacja o nieobecności i osobach zastępujących (wiadomości czatu nie są wysyłane do zastępujących).
- Podczas pracy w zastępstwie polecenie
Mój profil
wyświetla dane użytkownika zastępującego. Wyjątkiem jest sytuacja, kiedy użytkownik zastępowany nie ma uprawnień PBA do podglądu własnych danych. W takiej sytuacji wyświetlana jest informacja o braku dostępu (403), ponieważ zastępujący pracuje z uprawnieniami PBA zastępowanego.
- Jeśli audyt zdarzeń dla dokumentu biznesowego jest włączony, rejestrowane są informacje o użytkowniku który dokonał zmian oraz o tym, że pracował w zastępstwie i o osobie zastępowanej. W tabelach core.Audits, core.AudtitEventLogs i core.AuditEventLog dodano kolumnę NativeUserId. Jako wartości bilansu otwarcia dla nowej kolumny przyjęto wartości z kolumny UserId. Nie dotyczy to tabeli core.AuditLogs, której aktualizacja mogłaby powodować przekroczenie limitu czasu ze względu na dużą liczbę rekordów. W przypadku tej tabeli można po aktualizacji do nowej wersji uruchomić poniższy skrypt SQL.
- Inne zmiany
- Dotychczas podczas określania uprawnień ACL użytkownika sprawdzane były także jego zastępstwa, ponieważ zastępujący zachowywał swoje uprawnienia oraz nabywał uprawnienia zastępowanych. Obecnie nie jest to konieczne, a zmieniona funkcja core.GetAclIds powinna wydajniej obsługiwać uprawnienia ACL dla dużych zbiorów danych.
- Usunięto tabelę core.PermittedRoles (informacje o rolach objętych zastępstwem), a także zmodyfikowano funkcje tabelaryczne dotyczące zastępstw core.GetAllSubstitutions oraz core.SubstitutionsPerformedByUser. Obecnie te funkcje zwracają inny zestaw kolumn.
- Zmieniono weryfikację uprawnień PBA. Po podjęciu pracy w zastępstwie zastępujący ma tylko takie uprawnienia, jak zastępowany. Po zakończeniu pracy w zastępstwie przywracane są własne uprawnienia zalogowanego użytkownika.
- Akcje dodawania, edytowania i usuwania zastępstw nie zostały zmienione, jednak działają one poprawnie. Dla akcji dodawania i edycji atrybuty ról objętych zastępstwem są ignorowane.
- Zmodyfikowano endpoint PublicAPI PermissionDelegation/Save.
2. Migrator aplikacji
W migratorze aplikacji dodano sprawdzanie zgodności bazy danych importowanej aplikacji z bazą danych środowiska docelowego. Bazy danych są zgodne, kiedy podczas aktualizacji wersji nAxiom w obu wykonywany jest ten sam zestaw migracji Entity Framework, czyli kiedy ostatni rekord w tabeli core.__EFMigrationsHistory ma tę samą wartość w kolumnie MigrationId w obu bazach. W przypadku niezgodności wyświetlany jest komunikat i import jest blokowany.
3. Akcje C#
Zoptymalizowano działanie akcji C# pod kątem czasu wykonania oraz wykorzystania procesora i pamięci RAM. W tym celu wprowadzono zapisywanie skompilowanych skryptów akcji w pamięci cache. Do tej pory kompilacja odbywała się za każdym razem podczas wywołania akcji, co prowadziło do nadmiernego wykorzystania zasobów sprzętowych.
Ustawienia konfiguracyjne pamięci cache dla akcji C# znajdują się w sekcji AppConfiguration:Modules:Scripting w pliku appsettings.json serwisu api. Są to:
-
SlidingCacheExpirationInHours
: czas w godzinach (liczba zmiennoprzecinkowa) od ostatniego użycia, po upływie którego skompilowany skrypt jest usuwany z cache. -
EnableCompiledScriptCache
: wyłączenie zapisywania skompilowanych skryptów w pamięci cache.
Poprawki i usunięte błędy
1. Uprawnienia PBA do zastępstw
Wprowadzono drobne zmiany w uprawnieniach PBA w sekcji Zastępstwa
. Poprawiono opisy pól wyboru, zmieniono ich kolejność oraz zmieniono zachowanie tak, że zaznaczenie pola wyboru uprawnień o większym zakresie powoduje zaznaczenie pól wyboru o mniejszych zakresach.
Należy pamiętać, że uprawnienie do nadawania zastępstw dla dowolnego użytkownika obejmuje także podwładnych i siebie, a uprawnie dotyczące podwładnych obejmuje także siebie. Po przyznaniu uprawnienia o szerszym zakresie, pola wyboru uprawnień o węższym zakresie są ignorowane.