Open MateuszNaKodach opened 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
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.
http://ryankirkman.com/2013/01/31/activity-based-authorization.html
LibkaZRuby-MoznaSieWzorowac: https://github.com/ryanb/cancan/wiki/Defining-Abilities
SpringGranualPermissions: https://github.com/ebf/spring-granular-permissions
LibkaZeScala: https://github.com/florinn/veryfay-scala
https://dzone.com/refcardz/expression-based-authorization?chapter=1
https://stackoverflow.com/questions/53427611/permission-based-access-control-in-spring
https://github.com/nowakprojects/PersonalEducation/issues/1604
https://medium.com/sfl-newsroom/spring-security-expression-based-access-control-56411a60ab3b
https://www.google.com/search?q=spring+security+acl&oq=spring+security+acl&aqs=chrome..69i57j0l2j69i60l3.3535j0j7&sourceid=chrome&ie=UTF-8
https://mkarczewski.wordpress.com/2013/10/21/activity-based-authorization-in-modular-systems/
https://www.mdpi.com/2073-8994/11/5/669/htm
https://heap.io/blog/engineering/structure-permissions-saas-app
https://stackoverflow.com/questions/17684451/architecting-a-platform-authorization-permission-model