Dotyczy wersji 2021.1.x autor: Adrian Baszak
W miarę zwiększania się liczby wdrożonych aplikacji zwiększa się również liczba ról (reprezentowanych przez osoby lub grupy) którymi trzeba zarządzać. Przydatna może być wtedy możliwość sprawdzenia w jednym miejscu wszystkich uprawnień jakie są przypisane do danej osoby lub grupy. W tym artykule przedstawiony zostanie przykładowy obieg, który będzie to umożliwiać i który może być częścią większej aplikacji do zarządzania grupami stworzonej w oparci o WEBCON BPS.
Na jednym formularzu wyświetlone zostaną:
- Podstawowe informacje o użytkowniku, które są przechowywane na liście użytkowników BPS
- Grupy, do których należy wybrana osoba
- Osoby, które należą do wybranej grupy
- Uprawnienia osoby lub grupy na poziomie aplikacji, procesów i powiązań obiegów z typami formularzy.
- Reguły biznesowe, które wskazują na wybraną osobę lub grupę.
Dla każdego przykładu, pokazany zostanie widok od strony użytkownika oraz zapytanie SQL, które zwraca odpowiednie dane.
Wybór osoby lub grupy
Zanim wyświetlone zostaną jakiekolwiek dane, użytkownik musi wybrać osobę lub grupę. Obok wyświetlone zostaną podstawowe informację o użytkowniku.
Zapytanie SQL zwracające dane użytkownika z listy użytkowników BPS:
select COS_BpsID
,COS_DisplayName
,COS_Department
,COS_Email
,COS_JobTitle
,COS_ManagerBpsID
,COS_ManagerDisplayName
from CacheOrganizationStructure
where COS_BpsID = '{formFieldID}'
W miejsce '{formFieldID}' należy wstawić wartość z pola wyboru osoby.
Grupy użytkownika
Po wyborze użytkownika możliwe jest wyświetlenie listy wszystkich grup, do których należy.
ID grupy zostało skonfigurowane jako odnośnik do startowania nowej instancji tego samego obiegu (jako użytkownik domyślnie podpowiedziana zostanie kliknięta grupa), dzięki czemu można od razu sprawdzić uprawnienia grupy.
Zapytanie SQL zwracające wszystkie grupy, do których należy wybrana osoba:
select gr.COS_BPSID
,gr.COS_DisplayName
,(case gr.COS_AccountType
when '4' then 'Active Directory'
when '2' then 'BPS' end) as Type
from CacheOrganizationStructure as gr
join CacheOrganizationStructureGroupRelations on COSGR_GroupID = gr.COS_ID
join CacheOrganizationStructure as u on u.COS_ID = COSGR_UserID
where u.COS_BPSID = '{formFieldID}'
order by 3, 2
Użytkownicy w grupie
Jeśli wybrana została grupa, możemy wyświetlić listę jej użytkowników.
Podobnie jak w przypadku ID grupy, ID użytkownika zostało skonfigurowane jako odnośnik do startowania nowej instancji tego samego obiegu, dzięki czemu można od razu sprawdzić uprawnienia tego użytkownika.
Zapytanie SQL zwracające wszystkie osoby należące do wybranej grupy:
select u.COS_BpsID
,u.COS_DisplayName
from CacheOrganizationStructure as gr
join CacheOrganizationStructureGroupRelations on COSGR_GroupID = gr.COS_ID
join CacheOrganizationStructure as u on u.COS_ID = COSGR_UserID
where gr.COS_BPSID = '{formFieldID}'
order by 2
Uprawnienia na poziomie aplikacje
W kolejnej tabeli możemy wyświetlić listę aplikacji, do których dana grupa posiada uprawnienia:
Zapytanie SQL zwracające wszystkie aplikacje, do których osoba lub grupa ma uprawnienia:
select CSC_APPID
,APP_Name
,lvl.Name
from WFConfigurationSecurities
join WFApplications on APP_ID = CSC_APPID
join DicConfigurationSecurityLevels as lvl on lvl.TypeID = CSC_LevelID
where CSC_USERGUID = '{formFieldID}'
order by 2
W przypadku sprawdzania uprawnień użytkownika należy pamiętać, że ta lista wskaże tylko te uprawnienia, które użytkownik ma nadane bezpośrednio w BPS Designer Studio. Użytkownik może posiadać inne uprawnienia, wynikające z przynależności do grupy. Uprawnienia grupy należy wtedy sprawdzić osobno. Ta uwaga dotyczy również kolejnych przykładów.
Uprawnienia na poziomie procesów i powiązania typów formularzy z obiegiem
Informację o dostępnych aplikacjach możemy rozszerzyć o listę uprawniań użytkownika do poszczególnych procesów i obiegów.
Zapytanie SQL zwracające wszystkie procesy, obiegi i typy formularzy, do których osoba lub grupa ma uprawnienia:
select DEF_Name as Process
,'<All>' as Workflow
,'<All>' as FormType
,lvl.Name as [Level]
,isnull(COM_Name, '<All>') as BusinessEnity
from WFSecurities
join WFDefinitions on DEF_ID = SEC_DEFID
join DicSecurityLevels as lvl on lvl.TypeID = SEC_LevelID
left join Companies on COM_ID = SEC_COMID
where SEC_USERGUID = '{formFieldID}'
union all
select DEF_Name
,WF_Name
,DTYPE_Name
,lvl.Name
,isnull(COM_Name, '<All>') as COM_Name
from DocTypeAssocciations
join WFDocTypes on DTYPE_ID = ASS_DTYPEID
join WorkFlows on WF_ID = ASS_WFID
join WFSecurities on SEC_ASSID = ASS_ID
join WFDefinitions on DEF_ID = DTYPE_DEFID
join DicSecurityLevels as lvl on lvl.TypeID = SEC_LevelID
left join Companies on COM_ID = SEC_COMID
where SEC_USERGUID = '{formFieldID}'
order by 1, 2, 3
Wykorzystanie w regułach biznesowych
Jeśli konfigurując aplikacje przyjmiemy konwencję, że role będą reprezentowane przez odpowiadające im reguły biznesowe, możemy wyświetlić wszystkie te reguły. Konfiguracja takiej reguły powinna wyglądać jak na kolejnym zrzucie ekranu. Można ją wykorzystać do przypisania zadania lub w akcji nadającej uprawnienia.
Dokumentacja reguły powinna opisywać rolę w taki sposób, aby bez znajomości szczegółów konfiguracji można było określić do czego ona służy i w jaki sposób jest używana. Dzięki temu wystarczy wyświetlić listę reguł i ich opis.
Zapytanie SQL zwracające reguły biznesowe, w których używana jest dana osoba lub grupa:
select users.BRD_ID
,isnull(DEF_Name, '<Global>') as DEF_Name
,usage.BRD_Name
,usage.BRD_Documentation
from WFBusinessRuleDefinitions as users
join WFBusinessRuleDefinitions as usage on usage.BRD_ID = users.BRD_BRDID
left join WFDefinitions on DEF_ID = usage.BRD_DEFID
where dbo.ClearWFElemIDAdv(users.BRD_People) like '%{formFieldID}%'
and users.BRD_ReturnedValueType = 5
and users.BRD_IsLocal = 1
Podsumowanie
Przedstawione raporty i zapytania mogą być od razu wykorzystane, lub mogą być podstawą do tworzenia własnych raportów dotyczących uprawnień – dla przykładu:
- W środowiskach wielojęzycznych można dodać tłumaczenia nazw aplikacji, obiegów i typów formularzy
- Można powiązać obieg z obiegiem, w którym można zarządzać członkami grup – np. przez linki do obiegu dodawania użytkownika do grupy. (patrz. https://community.webcon.com/posts/post/managing-of-bps-groups/37)
- Wyświetlić inne miejsca konfiguracji, w których używana jest dana grupa lub osoba – np. reguły „USER IS ONE OF”.
- Każde zapytanie można wykorzystać niezależnie w innym procesie.