file manager (elfinder) pro ckeditor – jen pro admin usera
- dawe
- Člen | 59
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
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)
- David Kudera
- Člen | 455
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
});
- David Kudera
- Člen | 455
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ě
- Matey
- Člen | 142
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
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
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
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
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.