Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Code Igniter] ACL
Forum PHP.pl > Forum > PHP > Frameworki
marcin.pospiech
Chciałem poprosić o pomoc i rady. Z Code Igniter dopiero zaczynam, popisałem sobie w nim już pare dni, ogólnie poznałem jego sposób działania, etc.

Mam natomiast problem, jak rozwiązać autoryzację i ogółem - kontrolę dostępu. Póki co, dodaje do każdego kontrolera funkcję prywatną _logged(), która zwraca mi bool'owską odpowiedź. Jeżeli jakaś podstrona, czyli metoda jakiegoś kontrolera wymaga bycia zalogowanym za pomocą właśnie tej funkcji sprawdzam i dalej steruję if ... else. W przypadku, gdy gdzieś potrzebuję uprawnień administratora - sprawdzam przez bibliotekę session wartość zmiennej "permission".

Mam obiekcje, co do sposobu, w jaki to rozwiązałem. Po pierwsze, nie wydaje mi się to być robione w sposób "poprawny", jest nieelastyczne, muszę się powtarzać, no i jest niewygodne.

Szukałem w Google informacji na temat ACL w Code Igniter i jedyną sensowną rzeczą, którą znalazłem jest: User-Auth Mini-App. Jednak po chwili okazało się, że jest nieaktualizowane już od całego roku, więc zostawiłem to w spokoju.

Prosiłbym o rady odnośnie tego, czy robię to źle/dobrze i czy jest to bezpieczne, propozycje jak rozwiązać to lepiej, bo jestem przekonany, że tak można, no i przede wszystkim, o ile istnieją, o odnośniki do już przygotowanych bibliotek. Troszkę nie chce mi się wierzyć, że w takim popularnym frameworku, chwalonym przez ogrom osób, każdy piszę swoją bibliotekę do autoryzacji i uwierzytelniania.
nrm
Prawdziwego ACLa do CI nie ma. Możesz:

- użyć FreakAuth, nie jest technicznie zaawansowany, za to ma milion plików. Nie lubię go. Blogfrog używa.
- użyć klasy zend_acl z pakietu klas mylnie nazwanych ZendFramework
- użyć innej klasy (plusem CI jest spora elastyczność w dołączaniu zewnętrznych klas)
- napisać swoją własną

Sposób użycia?
Są niby "hooks" (czyli pre/post filtry) ale w CI działają dziwacznie, nie do końca jestem przekonany czy dev CI zrozumieli "o co komon".
Najlepiej będzie jak w autostarcie załadujesz swoją ACL bibliotekę, a w kontrolerach (akcjach lub w konstruktorze) wywołasz swoje $this->acl->isAuth();
marcin.pospiech
Dziękuje za odpowiedź.

Jakiego rozwiązania Ty używasz, bo domniemam, że napisałeś swoją własną bibliotekę?

Czy używanie biblioteki "session" w sposób, jaki opisałem w pierwszym poście jest poprawnym i bezpiecznym? Czy mogę o niego oprzeć budowanie własnego ACL?

I jeśli można o jeszcze jakieś ewentualne dodatkowe wskazówki dotyczące budowania tegoż ACL w CI.
nrm
I tak większość rozwiązań opiera się na sesjach więc jest to bezpieczny sposób na tyle ile same sesje są bezpieczne.

Ja używam własnego pseudo ACLa, a teraz będę pisał nowego bo poprzedni był kiepski, przerabiany wielokrotnie przez co jest niespójny i sam się już w nim gubię. Poza tym był prosty a teraz będę pisał pod konkretne zastosowanie.
marcin.pospiech
Czy mógłbyś go udostępnić jako swego rodzaju przykład, na którym mógłbym się wzorować/bazować, albo po prostu zobaczyć sposób, w jaki został wykonany?

Czy FreakAuth, pomimo wielu plików, działa sprawnie i dobrze spełnia swoje zadanie?

Czy opłaca się portować klasę Zend_ACL i czy nie będzie to sprzeczne z jakimiś ustaleniami bądź licencjami Zenda?
nrm
1. Nie.

2. Działa ok, czy spełnia zadanie to zależy czego potrzebujesz. Dla mnie nie spełnia.

3. Poczytaj licencje, imho możesz robić co chcesz. Czy "portować"? Zależy czy ta klasa Ci odpowiada. Jak tak to nawet nie ma co pytać tylko używać. winksmiley.jpg Mi ona nie odpowiada, dodatkowo musiałbym ją przystosować do obsługi bazy.

4. Może Tackle? "Tackle is a small ACL authentication module for PHP database applications. It is designed to have a low profile and be easy to implement and use. Users can grouped and allowed or denied access to user definable actions and resources."
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.