Weryfikacja i żądanie uprawnień
Akcje wykonywane przez wtyczkę mogą wymagać sprawdzenia lub żądania uprawnień. Do sprawdzania uprawnień użytkownika dostępne są metody CheckPermission oraz CheckPermissions. Aby zażądać uprawnień, można wyświetlić okna dialogowe za pomocą metod ShowCheckPermissionPopup oraz ShowCheckPermissionsPopup. Aktualnego użytkownika można poznać za pomocą metody GetCurrentUser. Jeśli terminal działa w trybie „Ścisłe przestrzeganie harmonogramu”, aktualną rolę można poznać za pomocą metody GetStrictAccordanceToScheduleUserRole.
Jak to wygląda w Syrve POS?
Na przykład wtyczka dodaje przycisk «SamplePlugin: Show OK popup» do. Przykładową realizację można zobaczyć w projekcie SamplePlugin SDK w klasie ButtonsTester.

Niech przycisk będzie klikalny tylko dla użytkowników z określonymi uprawnieniami. Istnieje kilka sposobów, aby to zrobić. Na początek należy zarejestrować przycisk:
// Rejestracja akcji na ekranie kasowym
subscription = PluginContext.Operations.AddButtonToPaymentScreen(
W wyniku wywołania metody rejestracji można uzyskać identyfikator przycisku - subscription.buttonId. Ten identyfikator będzie używany dalej.
Opcja 1: Wyłączenie przycisku dla wszystkich użytkowników, którzy nie mają uprawnienia do jego naciśnięcia.
Można włączać i wyłączać wcześniej dodany przycisk na ekranie kasowym za pomocą metody UpdatePaymentScreenButtonState, przekazując parametr isEnabled. Najwygodniej jest tutaj użyć zdarzenia CurrentUserChanged, aby wiedzieć, który użytkownik pracuje w danym momencie. Subskrybuj zdarzenie i sprawdź, czy użytkownik ma uprawnienie (np. prawo do wydruku raportu X "F_XR"):
// Subskrypcja zdarzenia zmiany aktualnego użytkownika
PluginContext.Notifications.CurrentUserChanged.Where(user => user != null).DistinctUntilChanged().Subscribe(user =>
{
var isButtonEnabled = PluginContext.Operations.CheckPermission(user, "F_XR");
PluginContext.Operations.UpdatePaymentScreenButtonState(subscription.buttonId, isEnabled: isButtonEnabled);
});
W ten sposób, jeśli aktualny użytkownik się zmieni, przycisk zostanie wyłączony lub włączony, w zależności od tego, czy posiada prawo "F_XR". Metoda CheckPermission przyjmuje 3 argumenty:
IUseruser— użytkownik, dla którego sprawdzane jest prawo.string permissionCode— uprawnienie, które użytkownik musi posiadać.IRolerole— parametr opcjonalny. Uprawnienie użytkownika. Używany, jeśli terminal działa w trybie „Ścisłe przestrzeganie harmonogramu”, można je uzyskać za pomocą metodyGetStrictAccordanceToScheduleUserRole.
Podobnie można sprawdzić kilka uprawnień za pomocą metody CheckPermissions. Przyjmuje ona 4 argumenty:
IUseruser— użytkownik, dla którego sprawdzane jest prawo.string[] permissionCodes— uprawnienia, które są sprawdzane u użytkownika.PermissionsCheckModecheckMode— sprawdzanie wszystkich uprawnień (PermissionsCheckMode.All) lub przynajmniej jednego (PermissionsCheckMode.Any).IRolerole— parametr opcjonalny. Uprawnienie użytkownika. Używany, jeśli terminal działa w trybie „Ścisłe przestrzeganie harmonogramu”.
Lista uprawnień użytkownika może się zmieniać. Aby to śledzić, można subskrybować zdarzenie UserChanged.
Opcja 2: Ukrycie przycisku dla wszystkich użytkowników, którzy nie mają uprawnienia do jego kliknięcia.
Można przenieść rejestrację przycisku do subskrypcji CurrentUserChanged:
(Guid buttonId, IDisposable buttonRegistration)? subscription = null;
// Subskrypcja zdarzenia zmiany aktualnego użytkownika
PluginContext.Notifications.CurrentUserChanged.Where(user => user != null).DistinctUntilChanged().Subscribe(user =>
{
if (PluginContext.Operations.CheckPermission(user, "F_XR")) //Użytkownik ma uprawnienie
{
if (subscription == null) //Czy przycisk był wcześniej utworzony
subscription = PluginContext.Operations.AddButtonToPaymentScreen("SamplePlugin: Show ok popup", false, true, ShowOkPopupOnPaymentScreen);
}
else //Użytkownik nie ma uprawnienia
{
subscription?.buttonRegistration.Dispose(); //Usuń przycisk, jeśli był utworzony
subscription = null;
}
});
W tym przypadku, jeśli użytkownik nie ma uprawnienia, przycisk nie będzie wyświetlany.
Opcja 3: Sprawdzenie, czy operacja może być wykonana w momencie naciśnięcia przycisku.
Jeśli można użyć obiektu IViewManager, można wyświetlić okno żądania uprawnień. Na przykład można to zrobić w subskrypcji zdarzenia kliknięcia przycisku. Istnieje kilka wariantów realizacji.
Opcja 3.1: Jeśli użytkownik ma uprawnienie, okno żądania nie zostanie wyświetlone. Jeśli użytkownik go nie ma, zostanie pokazane odpowiednie okno żądania uprawnień.
private void ShowOkPopupOnPaymentScreen((IOrder order, IOperationService os, IViewManager vm, (Guid buttonId, string caption, bool isChecked, string iconGeometry) state) info)
{
if (info.vm.ShowCheckPermissionPopup("F_XR", false) == null) //Uprawnienie nie zostało potwierdzone
return;
info.vm.ShowOkPopup("Okno testowe", "Wiadomość wyświetlona za pomocą SamplePlugin.");
}
Metoda ShowCheckPermissionPopup przyjmuje 2 argumenty:
string permissionCode— uprawnienie, które musi posiadać aktualny użytkownik.bool showConfirmPopupAnyway— jeślifalse, okno zostanie wyświetlone tylko wtedy, gdy aktualny użytkownik nie ma uprawnienia. Jeślitrue, okno zostanie wyświetlone nawet jeśli użytkownik ma uprawnienie.
Metoda zwraca instancję IUser — użytkownika, który potwierdził uprawnienie, lub null, jeśli uprawnienie nie zostało potwierdzone. Zauważ, że uprawnienie może potwierdzić dowolny użytkownik, nie tylko ten, który jest aktualnie zalogowany do terminala.
W takim przypadku, jeśli aktualny użytkownik ma uprawnienie, okno żądania uprawnień nie zostanie wyświetlone, a operacja zostanie wykonana. Jeśli uprawnienia nie ma, zostanie wyświetlone okno żądania uprawnień:

Jeśli uprawnienie zostało potwierdzone, metoda ShowCheckPermissionPopup zwróci instancję IUser — użytkownika, który potwierdził uprawnienia.
Opcja 3.2: Zażądaj uprawnienia w każdym przypadku, nawet jeśli użytkownik je posiada.
Czasami niezamierzone wykonanie operacji może przynieść niepożądane rezultaty. W takim przypadku możliwe jest wymuszenie potwierdzenia uprawnienia, nawet jeśli bieżący użytkownik już je posiada. Zmień subskrypcje kliknięć przycisków, wysyłając true do showConfirmPopupAnyway:
private void ShowOkPopupOnPaymentScreen((IOrder order, IOperationService os, IViewManager vm, (Guid buttonId, string caption, bool isChecked, string iconGeometry) state) info)
{
if (info.vm.ShowCheckPermissionPopup("F_XR", true) == null) //Uprawnienie nie zostało potwierdzone
return;
info.vm.ShowOkPopup("Okno testowe", "Komunikat wyświetlony za pomocą SamplePlugin.");
}
W takim przypadku okno z prośbą o uprawnienia będzie zawsze wyświetlane.
Opcja 4: Sprawdzanie kilku uprawnień.
Możliwe jest wyświetlenie okna do sprawdzenia kilku uprawnień, na przykład:
private void ShowOkPopupOnPaymentScreen((IOrder order, IOperationService os, IViewManager vm, (Guid buttonId, string caption, bool isChecked, string iconGeometry) state) info)
{
if (info.vm.ShowCheckPermissionsPopup(new string[] { "F_XR", "F_ZREP" }, false, PermissionsCheckMode.Any) == null) //Uprawnienie nie zostało potwierdzone
return;
info.vm.ShowOkPopup("Okno testowe", "Komunikat wyświetlony za pomocą SamplePlugin.");
}
Metoda ShowCheckPermissionsPopup przyjmuje 3 argumenty:
string[] permissionCodes— uprawnienia, które są sprawdzane u użytkownika.bool showConfirmPopupAnyway— jeślifalse, okno zostanie wyświetlone tylko wtedy, gdy bieżący użytkownik nie ma uprawnienia. Jeślitrue, okno zostanie wyświetlone nawet jeśli użytkownik ma uprawnienie.PermissionsCheckModecheckMode— sprawdzanie wszystkich uprawnień (PermissionsCheckMode.All), lub przynajmniej jednego (PermissionsCheckMode.Any).
Metoda zwraca obiekt IUser — użytkownika, który potwierdził uprawnienie, lub null jeśli uprawnienie nie zostało potwierdzone.