Marcin
B.
Webdirector,
Wspólwłasciciel
Contip.net
Temat: REST i SecurityComponent - czyli jak prawidłowo...
Witam,uruchamiam sobie w aplikacji API przy pomocy REST. To już działa, natomiast chciałbym teraz API odpowiednio zabezpieczyć przy pomocy SecurityComponent oczywiście (na początek wystarczy najprostsze zabezpieczenie login -> hasło).
Napisałem taki kawałek kodu i póki co sprawdza się ok:
public function beforeFilter() {
parent::beforeFilter();
if (!isset($this->params['admin']) && $this->RequestHandler->isXml()) {
$this->Security->loginOptions = array('type' => 'basic');
$this->Security->loginUsers = array('foo' => 'bar');
$this->Security->requireLogin();
$this->Security->validatePost = false;
}
}
Jednak mam kilka wątpliwości:
1. Czy sprawdzenie RequestHandler->isXml() jest wystarczające? Chodzi mi o to, czy jakieś inne zapytanie do aplikacji nie złapie się w ten warunek. A co jeśli będę chciał dorzucić JSON - przyjdzie mi modyfikować wszystkie warunki, stąd kolejne pytanie...
2. Czy można w jakiś sposób jednoznacznie rozpoznać, że zapytanie wykonywane jest z poziomu REST API, a nie jakieś inne? Choć w sumie nie wiem jakie inne zapytanie może być przez XML?
3. Może lepiej zdefiniować nowy routing prefix, tak jak mam dla admina, tak zrobić prefix o nazwie 'api' i takie tworzyć też akcje - api_index(), api_add(), api_edit(), itd...? Choć z drugiej strony w części przypadków będzie to spore powielenie kodu kontrolera, bo akcja index() dla zwykłego zapytania z przeglądarki może dawać dokładnie ten sam wynik.
4. Jeśli nie zrobię nowego prefixu, to będę miał np. w kontrolerze akcję index() i chciałbym, żeby ona była dostępna z poziomu API, ale nie chcę jej mieć z poziomu przeglądarki. Wiem, w drugim przypadku może nie być po prostu widoku i tak się nie wyświetli, ale jakieś marne to zabezpieczenie...
Trochę się tego zebrało, ale może ktoś da radę rozwiać moje wątpliwości :)