MateuszNaKodach / bialydunajec-monorepo

Modular monolith application (backend) with event-driven architecture and rich domain model developed mostly in DDD manner. Web application in Spring Boot 2 for student adaptation camp in Biały Dunajec.
4 stars 1 forks source link

Zdefiniowanie sposobu wykonania mechanizmu uprawnień #64

Open MateuszNaKodach opened 5 years ago

MateuszNaKodach commented 5 years ago

Historyjka użytkownika

W celu sprawnego zarządzania uprawnieniami bez zmian w kodzie, jako organizator obozu, chcę mieć możliwość wykonywania elastycznych zmian przypisanych do użytkowników uprawnień.

Należy znaleźć dobry sposób implementacji uprawnień i zaproponować sposób jego realizacji. W dodatkowych uwagach został zamieszczony proponowany sposób, choć oczywiście być może istnieją rozwiązania lepiej dostosowane do naszej aplikacji.

Podzadania

Należy zweryfikować i skonsultować, a także ewentualnie uaktualnić przed rozpoczęciem prac nad zgłoszeniem.

Dodatkowe uwagi

Być może dobrym sposobem byłoby zastosowanie podejścia opisanego tutaj: https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/ Opartego na komendach jako akcjach.

MateuszNaKodach commented 5 years ago

Zastanawiam się jak wykonać uprawnienia w aplikacji. Problem jest taki, że nie może to być system oparty na rolach. No chyba, że definiować role w stylu Szef Chatki XYZ itd. Bo dostęp do konkretnej akcji to nie zależy tylko od jej typu, ale także od argumentów - przykładowo szef chatki może modyfikować tylko swoją własną (jakieś id chatki). Dodatkowo problemem jest np. gdy ktoś wyjeżdża (np. szefa nie ma przez jakiś czas) i chciałby uprawnienie dla kogoś innego, dlatego niechciałbym też, aby było to łączone z konkretnym kontem użytkownika.

Mój jeden pomysł to dodanie adnotacji dla każdej Command i Query w systemie. Przy starcie aplikacje zapisywałaby takie w bazie danych. Następnie uprawnienia polegałyby na połączeniu danego konta z Command lub Query i określenie dla jakich argumentów może ją wykonać (przykładowo dla wszystkich), albo tylko cottageId o wartości XYZ. Później dane Command/Query przechodziłoby przez filtr sprawdzający czy użytkownik ma prawo do wykonania danej akcji.

Co myślicie o takim sposobie? Macie może jakieś inne pomysły? Widzicie jakieś minusy tego rozwiązania?

Myśląc o tym rozwiązaniu zainspirowałem się: https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/

Chciałbym uprawnienia jak najbardziej zautomatyzować.

DW: @Maras91 @wojteko22 @maleksandrowicz93 @markowanga @Lukasz-Michalczak @wojtek11530