Nette jako rychlá autorizační vrstva?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
badtaste
Člen | 9
+
0
-

Zdravím, Nette používám v několika jednoduchých aplikacích a vcelku mi vyhovuje. Nyní ale řeším problém, zda se dá taky použít jako autorizace ke zdroji cacheovaných (jak se to píše česky?) obrazků mapy. Bez autorizace jsou obrázky poskytované pomoci aplikace TileCache napsané v Pythonu.

Doba odezvy na localhost je okolo 20ms na jeden obrazek. Pokud ale nechám obrázky procházet přes Nette kde v BasePresenteru mam

if (!$this->user->isLoggedIn) { ....}

a v obsluznem presenteru

public function actionImgCache () {
	$httpRequest = $this->context->httpRequest;
	$uri = $httpRequest->getUrl();
	$remoteHost = $this->context->parameters['remotehost'];

	$url = $host."?".$uri->query;
	$loaded_url = file_get_contents($url);
	$header("Content-type: image/png");
	echo $loaded_url;

	exit();
}

tak se čas zvýší na cca 400ms.

Chtěl bych se proto zeptat zda někdo netuší na jaký čas bych se mohl dostat. A zda není potřeba něco v Nette vypnout nebo přenastavit, případně zda použité funkce PHP dávají smysl případně zda to neudělat celé nějak jinak. Uzivatel se ale prvotne loguje pomoci Nette s tim nejde asi nic udelat (Jako prejit na uplne neco jineho)

Diky za pripominky, zkusenosti, proste cokoliv,

BT

Felix
Nette Core | 1247
+
0
-

Startovat celou Nette aplikaci kvuli obrazku mi prijde trochu overhead. Jsem sam zvedavy co ti ostatni doporuci :-)

Eda
Backer | 220
+
0
-

A nestačilo by ti HTTP ověření? To bude násobně rychlejší. Tahat do toho Nette mi přijde zbytečné.

esorimer
Člen | 114
+
0
-

Možná bych zkusil readfile místo get_file_contents + echo.

badtaste
Člen | 9
+
0
-

Stacilo by mi HTTP overeni, ale nevim jak prenest prihlaseni z Nette na toto prihlaseni. Jak jsem psal uzivatel je prihlasen do aplikace napsane v Nette a pak teprve muze a take nemusi vyuzit sluzby poskytovani obrazku.

Neslo by se dostat nejak k sessions vytvorenych Nette a naslednou autorizaci provadet pomoci klasickych funkci PHP pro overeni pomoci sessions promenych?

BT

duke
Člen | 650
+
0
-

badtaste napsal:

Neslo by se dostat nejak k sessions vytvorenych Nette a naslednou autorizaci provadet pomoci klasickych funkci PHP pro overeni pomoci sessions promenych?

Šlo. Data lze nalézt v:

$_SESSION['__NF']['DATA'][$sectionName]
petr.pavel
Člen | 535
+
+1
-

Těch 400ms mi přijde moc. Možná na localhostu s ne-minifikovaným Nette a zapnutým debug barem. Ale na produkci? Není potřeba optimalizovat ověření uživatele? Jestli jsou jich tisíce, tak index na db tabulku udělá zázraky :-)

Asi potřebuješ, aby cesta ke cacheovaným (taky nevím) obrázkům byla z pohledu prohlížeče vždy stejná, že? Jinak bys totiž mohl vytvářet unikátní symlinky a po nějaké době je zase mazat cronem. Prohlížeč by nikdy neměl přímý přístup ke skutečnému adresáři, jen přes symlink. Tím bys vynutil autentizaci přes Nette jen každých x minut. Nepraktické pro jednotlivé obrázky, jestli jsou jich tisíce. Šlo by obejít symlinky na adresář, ale to zase nemůžeš ověřovat přístupová práva uživatele na úrovni obrázku.

Zajímalo by mě, jestli je možné z PHP nastavit obsah $_SERVER[‚PHP_AUTH_DIGEST‘] a tím uživatele přihlásit z Nette. Pak bys mohl v adresáři s obrázky aktualizovat .htpasswd. Stejný problém ale, jako se symlinky – jak povolení k přístupu odstranit.

P.S. Místo exit(); bys měl mít správně $this->terminate();

badtaste
Člen | 9
+
0
-

Tak cela akce nejak usnula ale nakonec to resim pomoci tech symlinku. Pri zalogovani ho vytvorim pri odlogovani zrusim, navic pro jistotu cistim cronem. Diky

srigi
Nette Blogger | 558
+
0
-

Neslo by na toto vyuzit micropresenter? Obydes cely kompontenovy stack, ktory robi sablony, ale ostane ti DI. A na auth by ti DI malo stacit.