Budowa interfejsu administratora

Uprawnienia do dokumentów

Założenia ogólne:

Temat dotyczy dostępu do dokumentów w zakresie odczytu i edycji i zmiany statusu danych.

Dotyczy wszystkich dokumentów zapisanych w bazie dokumentów w systemie (nie mylić z uprawnieniami do wykonywania raportów).

Uprawnienia dotyczą całych dokumentów (odczyt i edycja), lub ich fragmentów (edycja) wydzielonych konkretnymi grupami pól. Oddzielnie definiujemy uprawnienia do działań na poszczególnych etapach edycji.

Uprawnienia można definiować na dwa sposoby - uproszczony i zaawansowany. Uprawnienia uproszczone: Uprawnienia ogólne:

Uprawnienia określamy w postaci stringów zawierających listę wymaganych uprawnień.

Testowanie, czy aktualnie zalogowany użytkownik posiada wskazane uprawnienie odbywa się w metodzie (Delphi i skrypty):

TfmCustomBLForm.ChkDocRights(ARights : string):boolean;virtual;

Gdzie ARights określa listę wymaganych uprawnień. Wystarczy posiadać choć jedno z nich, by warunek był spełniony.

Funkcja jest nadpisywana w różnych formularzach Delphi tak, że dany dokument może być edytowany/odczytywany w ramach jednego formularza, a nie innego.

Uprawnienia do odczytu i edycji określamy w postaci oddzielnych stringów. Lista uprawnień stosowanych w pobytach:

Uprawnienia są sprawdzane przez funkcję odziedziczoną w formularzu pobytów z funkcji:

Function TfmCustomBLForm.ChkRights(ARights : string):boolean;virtual;

Obecnie system rozpoznanie następujące uprawnienia:

Uprawnienia dostępne we wszystkich formularzach:

Upr(id_Uprawnienia)     - uprawnienie ogólne systemu – id_uprawnienia oznacza   identyfikator

                                     uprawnienia ogólnego

Grp(idx_grupy_prac)     - przynależność do grupy pracowników przedstawianej jako identyfikator grupy;

GrpN(Nazwa_grupy)      - przynależność do grupy pracowników przedstawianej jako nazwa grupy;

bdView                                 - testuje, czy zalogowany może odczytywać wynik usługi.  Odczytać usługę wolno, gdy ma się choć jedno:
                                          - usługa ma status = X i ma się prawo do odczytu zgodnie ze stopniem poufności usługi (określonym w definicji usługi)
                                          - otwieramy ją nad formularzem badania i jest to to samo badanie, które jest otwarte w tym formularzu

bdEdit                                    - testuje, czy zalogowany może edytować jakąkolwiek usługę w badaniu,

                                     którego dotyczy dokument (z uwzględnieniem statusu usługi)

bdEditUsl(AIdx_uslugi)  -testuje, czy zalogowany może edytować wskazaną usługę w badaniu, którego

                                     dotyczy dokument (z uwzględnieniem statusu usługi)

 

UWAGA: Powyższe uprawnienia już działają, ale nie są jeszcze obsługiwane w edytorze uprawnień (jednak mogą być już skutecznie stosowane)

Uprawnienia dostępne w formularzu pobytu:

pbEdMed                            - uprawnienia edycji części medycznej zgodnie w uprawnieniem Edycja

                                            części medycznej w definicji oddziału

pbEdPiel                             - uprawnienia edycji części medycznej zgodnie w uprawnieniem Edycja

                                            części pielęgniarskiej w definicji oddziału

pbLekProw                         - jest lekarzem prowadzącym pacjenta

pbLekNadz                         - jest lekarzem nadzorującym

pbLekMozeProw                - może być lekarzem prowadzącym

pbLekMozeNadz                - może być lekarzem nadzorującym

pbLekMozePrzyjm             - może być lekarzem przyjmującym na oddział

pbLekMozeWypis              - może wypisywać pacjenta

pbLekMozeTylkoDyzurny - może być tylko lekarzem dyżurnym

pbLekMozePrzekaz            - może przekazywać pacjenta    

pbLekMozePotwPrzyj         - może potwierdzać przyjęcie

pbLekMozeCofacWypis     - może cofać wypis

pbLekMozeCofacPotw        - może cofać potwierdzenie przyjęcia

pbLekMozeEdRapPrzyj      - może edytować raport przyjęć

pbLekMozeEdListeOczek  - może edytować listę oczekujących

pbStan(NAZWA_STANOWISKA) – pracuje na stanowisku o nazwie: NAZWA_STANOWISKA

 

Jeśli pracownik spełnia choć jeden warunek, to ma prawo odczytu/edycji dokumentu, lub zakładki. Uprawnienia zaawansowane:

Uprawnienia zaawansowane są podawane w postaci wyrażenia FastScriptu poprzedzonego znakiem „=”. Dają one większe możliwości.

W celu symulowania wymienionych powyżej stałych można stosować funkcje: function Upr(AId_upr : integer) : boolean

Testuje, czy zalogowany użytkownik posiada wskazane uprawnienie function UprFm(AUpr : string; AArg: string = ‘’) : boolean

Testuje, czy zalogowany użytkownik posiada wskazane uprawnienie typowe dla formularza - np.: pbEdMed, pbLekProw. W zasadzie działa funkcji sprowadza się do sprawdzenia uprawnienia uproszczonego opisanego powyżej, czyli ważne jest też wywołanie: 

= UprFm(‘Upr’, ‘123’)

AArg oznacza dodatkowy argument i zwykle może by pominięte, wówczas oznacza ‘’.

UWAGA: Funkcja zwraca sensowne wyniki jedynie w sytuacji wywoływania w wyrażeniu sprawdzania uprawnień (w definicji pól i dokumentów) function Grp(AId_grp : integer) : boolean

Testuje, czy zalogowany użytkownik należy do grupy pracowników o podanym idx function GrpN(AGrp : string) : boolean

Testuje, czy zalogowany użytkownik należy do grupy pracowników o podanej nazwie

function bdEdit : boolean

Testuje, czy zalogowany może edytować jakąkolwiek usługę w badaniu, którego dotyczy dokument (z uwzględnieniem statusu usługi) function bdEditUsl(AIdx_uslugi : integer) : boolean

Testuje, czy zalogowany może edytować wskazaną usługę w badaniu, którego dotyczy dokument (z uwzględnieniem statusu usługi)

= (Upr(123) or Grp(10) or (Upr(120) and UprFm(‘pbLekProw’))) and not GrpN(‘Brzydale’)

Oczywiście wyrażenie może sięgać do różnych narzędzi np.:

=GrpN(‘Brzydale’) or (ParentForm.ClassName = 'TfmHosp') Implementacja sterowania uprawnieniami:

System dopuszcza obecnie dwa sposoby sterownia uprawnieniami:

  1. Tradycyjny oparty na uprawnieniach do zakładek dla WPEdit i wstęg dla FastReport. System zabezpiecza dane w momencie otwierania i generowania kart. Reszta odbywa się ręcznie z poziomu skryptu.
  2. Nowy – oparty na uprawnieniach dotyczących grup pól z uwzględnieniem ich etapu edycji. W nowym systemie nadal można korzystać z funkcji zmieniających uprawnienia do zakładek/wstęg, ale nie jest to polecane.

Tradycyjny system jest ustawiany jako domyślny dla starych raportów.

Dla nowych domyślnie jest wybierany nowy system.

Dla danego dokumentu stosowany jest jeden z tych systemów (nie oba równocześnie) – chodzi o sposób zabezpieczania pól w momencie otwierania kart.

Stosowany system uprawnień wybieramy na etapie definicji pól dokumentu w polu: System uprawnień

Poniżej jest opisany nowy system zabezpieczania pól.

Podczas otwierania dokumentu (SelectDocument) :

  1. system sprawdza prawa do odczytu dokumentu i ewentualnie ukrywa dokument.
  2. Jeśli cały dokument nie spełnia uprawnień do edycji, to klawisz edycji nie jest dostępny. Przy otwieraniu do edycji po wykonaniu procedury (1.) sprawdza prawa do edycji poszczególnych pól. Jeśli brak uprawnień do edycji konkretnych pól, jest ono chronione.

Edycja jest dozwolona, jeśli zalogowany użytkownik posiada prawo edycji grupy pól do której pole należy na etapie edycji, na jakim to pole się znajduje.

  1. Po wykonaniu pkt. 1 i ew. 2 wywoływane jest zdarzenie skryptowe: TfrxWPContainer.OnOpenDocEvent(AFirstOpen : boolean; AEditing : boolean; var ErrorMessage : string)

AFirstOpen – czy jest to pierwsze otwarcie dokumentu do edycji od czasu wygenerowania. W rzeczywistości jest ustawione na True przy pierwszym OnOpenDocEvent  po wykonaniu funkcji GenerateDocument.

AEditing – oznacza, czy dokument jest otwierany do edycji, czy odczytu. W przypadku kart innych, niż główna – zawsze przybiera wartość false.

ErrorMessage – można tu podać wiadomość, która zostanie zaprezentowana jako błąd.

W zdarzeniu tym można dodatkowo włączać, lub wyłączać ochronę zakładek (metoda ta nie jest obecnie zalecana; została zachowana z racji kompatybilności ze starymi raportami)

W zdarzeniu OnAppendEvent można dodać nowe fragmenty, które w momencie dodawania będą miały automatycznie włączaną odpowiednią protekcję (dotyczy to jedynie nowego systemu zabezpieczeń).

Reasumując system automatycznie, bazując na uprawnieniach użytkownika i wymaganych uprawnieniach pól włącza protekcję grup pól w następujących sytuacjach:

  1. Otwieranie nowej karty (protekcja jest uaktualniana dla całej otwieranej karty)
  2. Dodawania fragmentów dokumentu (protekcja jest uaktualniana dla całej otwartej karty)
  3. Zmianie statusu pól (protekcja jest uaktualniana dla wszystkich pól w całym dokumencie – we wszystkich kartach)

UWAGA: Obecnie nie jest polecane ręczne modyfikowanie protekcji pól/zakładek po wykonaniu tych operacji, choć odpowiednie funkcje ciągle są dostępne.

W dokumencie dane pole może występować kilkukrotnie z różnymi SID. Dla systemu uprawnień są one jednak nierozróżnialne – czyli jeśli mają one ten sam status, to system zastosuje dla nich taką sama protekcję. Tak więc jeśli te same pola z różnymi SID mają być/lub nie być edytowalne powinny być na innym etapie realizacji.

Z poziomu skryptów dostępna jest funkcja:

TfrxWPContainer .ChkDocRights(ARights : string):Boolean

Sprawdzająca, czy zalogowany użytkownik posiada choć jedno z uprawnień z listy ARights. Może ona być przydatna na etapie wywoływania zdarzenia: OnOpenDocEvent.