file manager (elfinder) pro ckeditor – jen pro admin usera

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

Ahoj, prosim o radu. Nasadil jsem elfinder a potreboval bych zajistit aby se k nemu nedostal nikdo jiny nez admin. Mam to nahrane ve slozce: /www/elfinder-2.0-rc1/ .. da se k tomu jednodusse pristoupit pres url. Nejsem si bohuzel vubec jisty jak to zajistit :( .. diky moc za rady

do CKEditoru to nacitam takto:

CKEDITOR.replace( 'dataEditor1', {
	    filebrowserBrowseUrl : '../../../elfinder-2.0-rc1/elfinder.html',
	    filebrowserImageBrowseUrl : '../../../elfinder-2.0-rc1/elfinder.html',
	    filebrowserFlashBrowseUrl : '../../../elfinder-2.0-rc1/elfinder.html'
	});
David Kudera
Člen | 455
+
0
-

Můžeš tyhle cesty nahradit za odkazy na nějakou akci v nette, kde provedeš kontrolu přihlášení a zpět odešleš FileResponse.. Jen to bude o něco pomalejší.

Takhle můžeš nastavit ty cesty:

<textarea id="dataEditor1" data-elfinder="{plink Editor:elfinder}"></textarea>

s jquery:

var editor = $('#dataEditor1');
var elfinder = editor.attr('data-elfinder');

CKEDITOR.replace(editor.attr('id'), {
	filebrowserBrowseUrl : elfinder,
	filebrowserImageBrowseUrl : elfinder,
	filebrowserFlashBrowseUrl :  elfinder
});

a presenter:

class EditorPresenter extends Presenter
{

	public function actionElfinder()
	{
		if (!$this->user->isInRole('admin')) {
			throw new ForbiddenRequestException;
		}

		$path = '/path/to/elfinder.html';
		$this->sendResponse(new FileResponse($path, null, 'text/html', false));
	}

}

Tím 4. argumentem u FileResponse false si úplně jistý nejsem, prostě vyzkoušej ;-)

A název presenteru a akce si nahradíš za své vlastní

Edit: plus musíš změnit práva k tomu elfinder.html, aby nebyl přístupný zvenku

Editoval David Kudera (15. 7. 2014 22:18)

dawe
Člen | 59
+
0
-

diky otestuji to, jen jeden dotaz, zda se neda nejak vyhnout tomu

<textarea id="dataEditor1" data-elfinder="{plink Editor:elfinder}"></textarea>

ze to budu muset pridat vsude, kde se to pouziva.

Co kdybych prejmenoval elfinder.php a udelal nejak autorizaci v nem? slo by to?

David Kudera
Člen | 455
+
0
-

V něm by jsi to tak neudělal, ale ten odkaz na akci můžeš mít i jako vytvořenou proměnnou pro javascript přímo v layout.latte

<script type="text/javascript">
	var elfinderPath = {plink Editor:elfinder};
</script>

a potom

CKEDITOR.replace('dataEditor1', {
    filebrowserBrowseUrl : elfinderPath,
    filebrowserImageBrowseUrl : elfinderPath,
    filebrowserFlashBrowseUrl :  elfinderPath
});
dawe
Člen | 59
+
0
-

diky otestuji
jinak jsem nasel nejaky takovy tutorial, ale nevedel jsem jak to napojit s nette

http://www.daveismyname.com/securing-elfinder-with-a-login-page-bp#.U8WKArFcoug
David Kudera
Člen | 455
+
0
-

Jo to je ta možnost, jak jsi tu psal no, jenže s nette by to nebyla taková sranda tu kontrolu tam dostat.. Takže to, co jsem tu napsal udělá v jedné akci kontrolu oprávnění, akce načte elfinder.html a pošle ho zpět uživateli. Jen je to prostě pomalejší o načtení nette a tak podobně

dawe
Člen | 59
+
0
-

prosimte a kam bych mel dat ten soubor, pouzivam sandbox strukturu

$path = '/path/to/elfinder.html';

ted to mam v

/www/elfinder-2.0-rc1/elfinder.html

ale tohle nastaveni nefunguje

$path = '/www/elfinder-2.0-rc1/elfinder.html';

Editoval dawe (15. 7. 2014 23:07)

Matey
Člen | 142
+
+1
-

pozrel som sa len tak narýchlo na ten elfinder, má to nejaké connector.php, ak práve prístup k tomu potrebuješ zamedziť tak môžeš použiť niečo také ako som použil pri responsive file manager

connector.php:

<?php
$container = require __DIR__ . '/../../../app/bootstrap.php';
$user = $container->getService('user');
if(!$user->isLoggedIn()) {
    $httpResponse = $container->getService('httpResponse'); // nepodstatné
    $httpResponse->redirect('/'); // nepodstatné .. len nech mi to presmeruváva na hlavnú stránku
    exit;
}

error_reporting(0); // Set E_ALL for debuging

include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'elFinderConnector.class.php';
// zvyšok...
?>

samozrejme upraviť cestu k bootstrapu aby sedela, prípadne nekontrolovať či je uživateľ lognutý ale či je v roli admina

Editoval Matey (16. 7. 2014 1:27)

David Kudera
Člen | 455
+
+1
-

dawe napsal(a):

prosimte a kam bych mel dat ten soubor, pouzivam sandbox strukturu

$path = '/path/to/elfinder.html';

ted to mam v

/www/elfinder-2.0-rc1/elfinder.html

ale tohle nastaveni nefunguje

$path = '/www/elfinder-2.0-rc1/elfinder.html';

protože to je absolutní cesta a takovou v systému asi nemáš.. Takže třeba takhle:

$path = __DIR__. '/../../www/elfinder-2.0-rc1/elfinder.html';

A ráno mě napadlo něco ve stylu toho, jak píše @Matey, ale ve spojení s tím článek, co jsi posílal. Klidně by to šlo snadno s tím přejmenováním na .php a dát na začátek načtení bootstrapu, vytáhnutí Nette\Security\User, kontrola a zbytek stejný.

$container = require __DIR__ . '/../../../app/bootstrap.php';
$user = $container->getByType('Nette\Security\User'); // Osobně dávám raději přednost načtení podle názvu třídy (když už teda musím)
if(!$user->isInRole('admin')) {
    exit;
}

Edit: jen je špatný, že když budeš dělat aktualizaci toho elfinderu, tak nesmíš zapomenout zase na tyhle úpravy. Proto mi přijde lepší to udělat nějak „z venku“ bez zásahu do samotné knihovny

Editoval David Kudera (16. 7. 2014 8:31)

dawe
Člen | 59
+
+1
-

Matey: to zni hezky, takto by mi to prislo nejlehci, ale nejde mi to. Kdyz upravim ten elfinder connector.php, tak mi ten file manager zacne psat

Invalid backend response.
Data is not JSON.

uplne tomu nerozumim proc to pise, ale prijde mi, ze nijak nemuzu upravit ten jejich kod

edit: tak se zda ze to funguje, jen ten redirect se neprovede spravne a proto to vypise.. jeste to budu testovat..

jinak diky moc :)

Editoval dawe (16. 7. 2014 8:49)

dawe
Člen | 59
+
0
-

Ahoj,
narazil jsem jeste na jeden problem, predtim mi to mam pocit nedelalo, ale nevim proc. Jde o to, ze kdyz neco nahraju (to jde bez problemu), tak potom se vola obnoveni slozky pomoci ajaxu a to mi vraci problem s JSON daty. Zjistil jsem, ze se za to pripojuje

<!-- Nette Debug Bar -->

<script>
(function(onloadOrig) {
...

co bych mel udelat aby se to tam nevypisovalo?

dawe
Člen | 59
+
0
-

prosim nevi nekdo?

japlavaren
Člen | 404
+
0
-

to ti vklada priamo do toho jsonu?

dawe
Člen | 59
+
0
-

jjo primo do nej, a pak to kvuli tomu dava chybu

David Kudera
Člen | 455
+
0
-

jen pro jistotu, jak tu json odpoveď odesíláš?

dawe
Člen | 59
+
0
-

Tak ja nevim, ted mi to prestalo delat a to jsem tam nic nemenil, jen jsem na jine sity, ale to s tim asi nemuze souviset. Hlavne ze to delalo zrovna, kdyz jsem to ukazoval klientovi :) …

Jinak ten json se tam predava sam, po uploadnuti souboru se pomoci ajaxu vola aktualizace slozky.