![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Oto mały diagram UML mający na celu opisać moją koncepcję klas Autoryzacji i Uwierzytelniania oraz zależności miedzy nimi. Co o tym sądzicie?
![]()
Umożliwiło by to dowolny sposób autoryzacji użytkownika. Role, phpGACL itp. Można by także zaimplementować intefejs IAuthorizationDataSource pod którąś z klas warstwy modelu. Czekam na krytyke :] ps. ciekawe czy ktoś doceni moje umiejętności robienia diagramów UML w MS Paint :] Ten post edytował Vengeance 22.07.2005, 19:21:12 -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Ciężko powiedzieć, bo cała sztuka w tym, jak to się będzie integrowało z sesjami itd.
Dwie uwagi: 1) Nazwa klasy IAuthentication, IAuthorization jest IMHO zła, bo to nazwa czynności. Może lepiej IAuthorizer, IAuthenticator? 2) Ostatnio znalazłem jakiś dziwny framework, który jednakowoż miał kilka fajnych pomysłów odnośnie uwierzytelniania. M.in. oddzielne klasy do weryfikacji username+password i do wyciągania grup, do których user należy. Miało to sens, bo hasło sprawdzali np w htpasswd, etc/passwd i takich. A grupy z pliku ini. 3) Widzę, że próbujesz uniezależnić się od rodzaju autoryzacji. Co wtedy musi zwracać IAutorizationDataSource? Tablicę nazw akcji? Wtedy problem pojawi się znowu, tylko na niższym poziomie. 4) Ja się skłaniam (jak widać w punkcie 2) na rozwiązanie oparte o grupy. Bo znam tylko 2 rozwiązania: zagnieżdżone grupy lub RBAC. Ale role można przedstawić za pomocą grup ![]() 5) Naprawdę MS Paint?! Jak tak, to kongratulejszynz, ale nie chce mi się wierzyć... A próbowałeś php2xmi? Bardzo wysoko na mojej liście todo. 6) Miały być dwie uwagi, ale jakoś tak wyszło ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat 3) Widzę, że próbujesz uniezależnić się od rodzaju autoryzacji. Co wtedy musi zwracać IAutorizationDataSource? Tablicę nazw akcji? Wtedy problem pojawi się znowu, tylko na niższym poziomie. IAutorizationDataSource w moim zamierzeniu ma dostarczać takich danych jak np. wszystkie grupy do jakich należy user, wszystkie role jak ie posiada (mozna powiedziec ze to to samo, ale nei zawsze) itd... Na podstawie tych danych IAutorization dokonuje sprawdzenia uprawnien. Dzieki temu mozna zarowno zmienic latwo miejsce przechowywania danych jak i kompletnie zmienic sposob autoryzacji (piszac wlasne IAutorization i odpowidni IAutorizationDataSource) -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
No to generalnie myślimy o tym samym
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Można :] Ale ktoś może chcieć (pewnie i tak tylko ja, no ale nigdy nic nei wiadomo) zastosować inne mechanizmy autoryzacji, lub inne mechanizmy pobierania danych do sprawdzenia uprawnień. Tak więc ten "system" wydaje mi się maksymalnie elastyczny.
A co do sesji, get, post itd... Chyba wystarczy zwykłe pobieranie poprzez Application::Instance()->GetRequest() A w razie błędu rzucamy na lewo i prawo wyjątkami ;P -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
a co myślicie o takim sposobie autoryzacji:
Wtedy mamy dosy dużą elastycznośc i jest standardowy sposób autoryzacji: "Czy $iUser może wykonac operację $sAction na obiekcie $sObject?" pyt nr 2: Czy grupy wpleśc tylko w Autoryzacje? Czy też w ajkis sposób powiązac je z autentykacją? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
A po co grupy przy uwierzytelnianu?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@matid: Przy uwierzytelnianiu faktycznie do niczego nie są potrzebne. Ale wynikiem uwierzytelniania może też być lista grup (jeżeli w ogóle używamy grup, of course).
@aleksander: Idea jest szczytna i w ogóle, tylko że za bardzo nie wiem, jak tym wszystkim zarządzać. Potrzebny jest identyfikator obiektu. Czy np. akcja w MVC jest obiektem? Czy identyfikator obiektu nie powinien być integerem? Druga sprawa, że jeżeli wykorzystujemy grupy, to powinniśmy tej funkcji przekazywać również wszystkie grupy użytkownika. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
a mnie się wydaje, że to Autoryzacja powinna zarzadza grupami więc sama w sobie wie, że dany user należy do danej/danych grup (ma swoje metody np:P)
Zauwarzyłem, że Twój tok myślenia jednak jest w phpGACL, ale nie widze żadnych płynącyc z tego kożyści:) |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Można i tak, i tak... Ale IMHO znacznie lepiej jest to robić na etapie uwierzytelniania. Weźmy na przykład LDAP. Jeden fragment systemu połączy się z serwerem LDAP w celu sprawdzenia hasła, a drugi, zupełnie niezależny fragment zrobi to samo, tym razem w celu ustalenia grup, dbając o to, aby użyć tych samych parametrów połączenia. Nie da rady.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
U mnie da się to zrobić ustawiając jako DataSource obiekt Uwierzytelniania, któy to po udanym logowaniu może trzymać w sobie dane o userze jak ID, username i grupy. Potem autoryzacja tylko pobiera te dane.
-------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Odnosząc sie do całego tematu.
Ja sie uciekłem do pomysłu z podmianą kontrollera - można sobie wybrać który potrzebny - czy ten z uwierzytelnianem/autoryzacją czy bez ![]() Co tematu Authorizer'a i innych - też mam coś takiego z tym, że ja sobie stworzyłem poprostu drivery do obu tych klas - ładny interfejsik i po bólu.. -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.07.2025 - 18:31 |