Próbuję użyć frameworka Apache Shiro do zabezpieczenia mojej aplikacji internetowej (interfejs oparty jest na Vaadin 6). Przejrzałam wszystkie przykłady na stronie Shiro, a także googlowałem przez wiele godzin, ale nie mogę znaleźć prostego sposobu na spełnienie następujących wymagań.Jak radzić sobie z hierachicznymi rolami/uprawnieniami za pomocą Apache Shiro?
Założenie aplikacji jest rodzajem narzędzia do zarządzania projektami, w którym użytkownicy tworzą działania, które należą do poszczególnych działów w hierarchii firmy. Każdy użytkownik może pracować w kilku działach i ma różne role zabezpieczeń w każdym dziale. Przykład:
Department A - User is 'Manager' here Department B Department C - User is 'Admin' here Department D
Użytkownik nie jest „Menedżer” w dziale A użytkownika to „Admin” w dziale C użytkownik powinien również dziedziczyć rolę „admin” za dział D (który jest przodkiem Działu C).
Więc podstawowy check pozwolenie (zakładając, że chcę zobaczyć aktywność należącej do jakiegoś działu) byłoby:
- Sprawdź, czy użytkownik aktywność próbuje widzenia należy do użytkownika department odgrywa rolę w;
- Sprawdź, czy użytkownik ma wymagane pozwolenie w oparciu o jego rolę w tym dziale.
W tej chwili utknąłem w zrozumieniu, w jaki sposób wdrożyć nie tylko "rolę całego systemu", ale także "rolę w tym konkretnym dziale".
Jak mogę przekonwertować powyższy przykład na ciąg uprawnień, taki jak "activity: view: 123"? I jak mogę sprawdzić pozwolenie w mojej logice biznesowej?
Jeszcze jedna wątpliwość to implementacja z Shiro, chciałbym użyć jakiegoś nieszablonowego rozwiązania przy minimalnych wysiłkach związanych z dostarczaniem własnych implementacji. Wydaje się jednak, że wbudowane implementacje Shiro są przeznaczone tylko do prostych przypadków. Czy istnieje przykład złożonej autoryzacji na początek (która może obejmować powyższy przypadek)?