- Rola jest podstawową jednostką nadawania uprawnień — użytkownik dostaje dostęp przez przypisanie do roli, nie pojedynczo.
- Kolumna
ROLASYSpozwala łączyć kilka ról w grupę systemową o wspólnych uprawnieniach. - Znacznik
PROXYtworzy rolę o ograniczonej widoczności danych — przeznaczoną dla kontrahentów zewnętrznych. - Kolumny
INSTRUKCJA_*pozwalają opisać przeznaczenie roli i podlinkować instrukcję dla jej użytkowników.
Do czego służy tabela [dbo].[_role]
Magazynier, kierownik zmiany, kontroler jakości i przedstawiciel kontrahenta korzystają z tego samego systemu, ale każde z nich powinno widzieć coś innego. Tabela [dbo].[_role] jest miejscem, w którym te różnice są zdefiniowane. Uprawnienia nadaje się roli, a użytkownikowi przypisuje rolę — dzięki czemu zatrudnienie kolejnej osoby na tym samym stanowisku nie wymaga ustalania niczego od nowa.
Definicja obejmuje trzy warstwy. Pierwsza to identyfikacja: nazwa roli, opis, kod firmy oraz symbol PRX objęty ograniczeniem unikalności. Druga — prezentacja w interfejsie: trzy rozmiary ikony, kolor tła i kolejność na liście widocznej dla administratora. Trzecia to dokumentacja: link do instrukcji i opis przeznaczenia roli o pojemności pięciu tysięcy znaków.
Najciekawszy jest znacznik PROXY. Rola oznaczona w ten sposób ma ograniczoną widoczność danych, co pozwala udostępnić system podmiotowi zewnętrznemu — przewoźnikowi, klientowi operatora logistycznego albo dostawcy — bez ryzyka, że zobaczy on cudze dokumenty. Towarzyszący jej znacznik PROXY_KOMUNIKATY steruje osobno powiadomieniami dla takich użytkowników.
Ostatnia warstwa bywa pomijana, a to ona odpowiada na pytanie, dlaczego dana rola w ogóle powstała — po dwóch latach nikt tego nie pamięta.
Budowa tabeli — wykaz kolumn
Osiemnaście kolumn opisuje rolę w trzech wymiarach: kim jest, co widzi i jak wygląda w interfejsie.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
| Identyfikacja roli | |||
ID_ROLA | int liczba całkowita | tak | Unikalny identyfikator wiersza tabeli |
ROLA | varchar(20) tekst do 20 znaków | tak | Nazwa roli |
OPIS | varchar(100) tekst do 100 znaków | tak | Opis roli |
PRX | varchar(5) tekst do 5 znaków | tak | Identyfikator pozycji |
FIRMA | varchar(20) tekst do 20 znaków | tak | Kod firmy |
ROLASYS | varchar(3) tekst do 3 znaków | nie | Oznaczenie grupy roli systemowej obejmującej kilka ról |
AKTYWNE | bit wartość logiczna 0/1 | tak | Oznaczenie czy dana rola jest aktywna |
SYSTEMOWE | bit wartość logiczna 0/1 | tak | Oznaczenie czy dany wiersz tabeli jest synchronizaowany z bazy ROOT |
| Zakres widoczności | |||
PROXY | bit wartość logiczna 0/1 | nie | Parametr określający czy rola jest typu proxy - parametr ograniczy widoczność powiadomień w programie. Wartośc true paramtru spowoduje ograniczenie widoczności powiadomień do uproszczonej funkcjonalnośc |
PROXY_KOMUNIKATY | bit wartość logiczna 0/1 | nie | Parametr odpowiada za konfigurację powiadomień - wartość true spowoduje, że użytkownik nie będzie miał dostępu do wiadomości |
| Prezentacja i dokumentacja | |||
OBRAZEK | varchar(100) tekst do 100 znaków | nie | Przypisanie ikony dla danej roli |
OBRAZEK16 | varchar(100) tekst do 100 znaków | nie | Przypisanie ikony dla danej roli w formacie 16×16 |
OBRAZEK24 | varchar(100) tekst do 100 znaków | nie | Przypisanie ikony dla danej roli w formacie 24×24 |
BACKCOLOR | varchar(20) tekst do 20 znaków | nie | Kolor roli wyświetlany w menu SuperVisor i konfiguracji |
KOLEJNOSC | int liczba całkowita | nie | Określenie kolejności wyświetlania na liście menu dla użytkownika SuperVisor |
INSTRUKCJA | varchar(250) tekst do 250 znaków | nie | Link do opisu danej roli, dowolna witryna www |
INSTRUKCJA_URL | varchar(250) tekst do 250 znaków | nie | Wskazanie linku do instrukcji programu dla poszczególnych ról w programie |
INSTRUKCJA_OPIS | varchar(5000) tekst do 5000 znaków | nie | Opis przenaczenia danej roli |
Kolumna ROLASYS ma zaledwie trzy znaki i grupuje role o wspólnych uprawnieniach systemowych. To do niej, a nie do nazwy roli, odwołują się definicje zapytań w tabeli _code_sql.
Indeksy i wydajność zapytań
Trzy indeksy odpowiadają odczytowi przy logowaniu, przy budowaniu menu i przy kontroli unikalności symbolu.
| Indeks | Kolumny | Rodzaj |
|---|---|---|
PK__role | ID_ROLA | klucz główny |
PRX | PRX | unikalny |
ROLA | ROLA | zwykły |
Indeks na kolumnie PRX jest unikalny, co wyklucza przypisanie tego samego symbolu dwóm rolom. Ma to znaczenie szersze niż porządkowe: symbol występuje w innych tabelach konfiguracyjnych, więc jego niejednoznaczność przełożyłaby się na nieprzewidywalne uprawnienia.
Ile ról zdefiniować i jak je rozgraniczyć
Najczęstszy błąd przy wdrożeniu to odwzorowanie w rolach struktury organizacyjnej firmy zamiast rzeczywistych potrzeb dostępowych. Poniżej praktyka, która sprawdza się w magazynach.
- Rola odpowiada zestawowi czynności, nie stanowisku. Dwa różne stanowiska wykonujące te same operacje mogą dzielić jedną rolę.
- Zaczynaj od minimum. Rozszerzenie uprawnień jest prostą operacją; ich odebranie po tym, jak ludzie przywykli, znacznie trudniejszą.
- Rozdziel dostęp do odczytu i zatwierdzania. Możliwość obejrzenia dokumentu i możliwość wprowadzenia go do obiegu to dwie różne rzeczy.
- Dla podmiotów zewnętrznych używaj trybu proxy zamiast zwykłej roli o zawężonym menu — ukrycie pozycji nie ogranicza dostępu do danych.
- Nazywaj role opisowo.
MAGAZYN_WYDANIAmówi więcej niżROLA7, a nazwy nie da się później bezboleśnie zmienić.
Warto też pilnować liczby ról. Kilkanaście definicji jest łatwe do ogarnięcia i sprawdzenia; kilkadziesiąt sprawia, że nikt nie ma pewności, kto co widzi — a wtedy audyt uprawnień staje się osobnym projektem. Jeżeli liczba ról zbliża się do liczby stanowisk, zwykle oznacza to, że rozgraniczono je według struktury organizacyjnej zamiast według wykonywanych czynności.
Jak korzystać z tabeli w praktyce
Przy definiowaniu i utrzymaniu ról obowiązują następujące zasady:
- Wypełniaj kolumnę
INSTRUKCJA_OPISprzy zakładaniu roli — po dwóch latach to jedyne źródło informacji o tym, po co powstała. - Nie zmieniaj nazwy roli już używanej; występuje w dzienniku zdarzeń i w definicjach zapytań, a zmiana zrywa te powiązania.
- Wyłączaj role nieużywane znacznikiem
AKTYWNEzamiast je usuwać; wpisy historyczne nadal się do nich odwołują. - Stosuj tryb
PROXYdla każdego dostępu udzielanego podmiotowi spoza firmy, także przy krótkotrwałej współpracy. - Przeglądaj listę ról okresowo pod kątem definicji nieprzypisanych żadnemu użytkownikowi — zwykle są to pozostałości po wdrożeniu.
- Uzupełniaj komplet trzech ikon; brakująca miniatura objawia się pustym miejscem w konfiguracji uprawnień.
Przegląd ról wraz z liczbą przypisanych użytkowników — podstawa okresowego audytu uprawnień:
SELECT r.ROLA,
r.OPIS,
r.ROLASYS,
CASE WHEN r.PROXY = 1 THEN 'tak' ELSE 'nie' END AS PROXY,
COUNT(u.LOGIN) AS UZYTKOWNIKOW
FROM dbo._role AS r
LEFT JOIN dbo._users AS u
ON u.ROLA = r.ROLA AND u.AKTYWNE = 1
WHERE r.AKTYWNE = 1
GROUP BY r.ROLA, r.OPIS, r.ROLASYS, r.PROXY
ORDER BY UZYTKOWNIKOW DESC, r.ROLA;
Role z zerową liczbą użytkowników zasługują na sprawdzenie — albo są pozostałością po wdrożeniu, albo czekają na przypisanie, o którym ktoś zapomniał.
Uprawnienia są jednym z niewielu obszarów systemu, w których nadmiar szkodzi bardziej niż niedobór. Zbyt wąska rola objawi się zgłoszeniem tego samego dnia; zbyt szeroka nie objawi się wcale, dopóki ktoś nie zobaczy danych, których widzieć nie powinien.
Powiązane tabele i dokumentacja
Definicje ról są punktem odniesienia dla uprawnień opisanych w pozostałych tabelach: