UserPanel – rychlý login/logout při vývoji pro programátory

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

Ahoj, při nové aplikace jsem si napsal panýlek pro rychlé přihlášení a odhlášení uživatele. Plus zobrazuje role a data z identity. Počkám nějaký čas a budu ho testovat v praxi. https://github.com/…as/UserPanel
Vás prosím o nějaký feedback (tentokát snad pozitivnější ; ) a až se přesvědčím, že panel opravdu šlape jako hodinky, dal bych ho do addons.

Editoval Mikulas Dite (22. 12. 2010 23:44)

Lopo
Člen | 277
+
0
-

mno … ladenka mi ziape „Trying to get property of non-object“ na UserPanel.php #L53

Mikulas Dite
Člen | 756
+
0
-

Tak to je divný, Environment::getUser()->identity->data by mělo fungovat vždycky, nebo ne?

Edit: je teda pravda, že IIdentity data nemá, Identity ano. Upravil jsem to na vlastnosti IIdentity a už to snad funguje.

Editoval Mikulas Dite (31. 10. 2010 19:06)

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

nemělo by to být:

Environment::getUser()->getIdentity()->data

Bernard

Mikulas Dite
Člen | 756
+
0
-

Nemělo, Nette object má chytré gettery.
Edit: ale dík za nápad.

Editoval Mikulas Dite (31. 10. 2010 19:50)

JakubJarabica
Gold Partner | 184
+
0
-

Malý feature request – čo tak urobiť selectbox na jednoduché prehadzovanie identít? Často sa mi stane, že chcem danú stránku vidieť raz ako rola admin a raz ako rula user :)

Mikulas Dite
Člen | 756
+
0
-

JAM3SoN napsal(a):

Malý feature request – čo tak urobiť selectbox na jednoduché prehadzovanie identít? Často sa mi stane, že chcem danú stránku vidieť raz ako rola admin a raz ako rula user :)

Díky, to rozhodně udělám, je to dobrý nápad.

Bernard Williams
Člen | 207
+
0
-

To já bych spíš uvítal možnost přepínat celé uživatele (ne jen role). Panel by si mohl pamatovat třeba 3 až 5 posledních loginů a přes jeden button by je dokázal přihlásit. Co se týče implementace, tak by si třeba pamatoval cookies na trvalé přihlášení.

JakubJarabica
Gold Partner | 184
+
0
-

@Bernard:
Role boli priklad, pisal som o celych identitach. Pri prihlasovani by mohla byt moznost „zapamatat“, pricom ak by si ju zafajkol, pridala by sa tato identita do selectboxu. Zmena hodnoty v selectboxe by znamenala odhlasenie aktualneho usera a prihlasenie vybraneho(na zaklade ulozeneho username+pass, imho netreba cookies) a uz len pridat moznost odstranit identitu z ulozenych.

Editoval JAM3SoN (1. 11. 2010 0:27)

Filip Procházka
Moderator | 4668
+
0
-

geniální, fandím, stahuju :)

newPOPE
Člen | 648
+
0
-

Tiez sa snazim to rozbehnut no narazil som na problem na riadku #L39

<?php
	... $this->reflection->shortName ...
?>

MemberAccessException ‚shortName‘ …, skusal som na rychlo hladat kde je problem ale pravdupovediac som ziadnu shortName nikde nenasiel.

Nette 2.0alpha s download sekcie pre 5.2. Prepisal som si to do prefixed verzie aj s umlcanim namespaces.
Netusi niekto kde by mohol byt problem?

Dik

Mikulas Dite
Člen | 756
+
0
-

JAM3SoN napsal(a):

Malý feature request – čo tak urobiť selectbox na jednoduché prehadzovanie identít? Často sa mi stane, že chcem danú stránku vidieť raz ako rola admin a raz ako rula user :)

Splněno.

HosipLan napsal(a):

geniální, fandím, stahuju :)

Dík :)

newPOPE napsal(a):

Tiez sa snazim to rozbehnut no narazil som na problem na riadku #L39
… prepisal som si to do prefixed verzie aj s umlcanim namespaces…

Jestlis přepsal i ClassReflection (asi NClassReflection?), tak by to sice fungovat mělo, ale radši jsem se tomu vyhnul a jméno tam napsal přímo. Sice to není úplně nejlepší, ale v tomhle případě to oželím.

Čelo
Člen | 42
+
0
-

zkoušel jsem zprovoznit tento panel na Nette2a2, ale bohužel bez úspěchu. Panel se nejdříve vůbec nezobrazoval, až po odstranění javascriptové části se sice zobrazil, ale při odeslání formuláře podle všeho nedochází k zavolání funkce onLoginSubmitted. Hledal jsem i na foru, co se v posledních verzích změnilo a vyjma hrátek s base64 jsem nic kloudného nedohledal. Neřešil to již někdo? Ocenil bych i nějaké popostrčení.

Mikulas Dite
Člen | 756
+
0
-

Radši jsem to otestoval a na čistém Nette funguje v pořádku.

Rád to fixnu, ale trochu se o problému rozepiš. Díky

Čelo
Člen | 42
+
0
-

Teď jsem stáhl alpha verzi z webu, z githubu panel a zkusil jsem to na čistém sandboxu a mne bohužel stále nic … nevím, co víc popisovat (problém je na druhém řádku javascriptu, co se týče zobrazování), tak raději pošlu mou kopii aplikace, kterou jsem si z tohoto testu vytvořil.
http://dl.dropbox.com/…serpanel.zip

Opravdu se ti v tomto sandboxu panel zobrazí?

Mikulas Dite
Člen | 756
+
0
-

Tak problém je trochu jinde. Osobně panely nikdy neregistruju v bootstrapu (můj je vlastně skoro prázdný, když už na to přišla řeč), ale v BasePresenter::startup. Máš recht, že v dokumentaci panelu jsem to napsal špatně.

Díky, doc už jsem opravil a radši do panelu přidal kontrolu.

Edit: řešením je tedy přesunout tu registraci z bootstrapu jinam (kde už je presenter k mání). Možná to někdy přepíšu, ale lazy volání frameworku je pro panel moc luxus.

Editoval Mikulas Dite (16. 11. 2010 18:19)

sin
Člen | 82
+
0
-

Je možné někde stahnout aktuální verzi? První odkaz je nefunkční…

Mikulas Dite
Člen | 756
+
0
-

Díky, link jsem v prvním postu opravil.

Nox
Člen | 378
+
0
-

Zkouším zprovoznit UserPanel, ale vždycky nehledě na nastavení se vždycky zacyklí javascript

Ve firebugu to ukazuje na hlavičku for cyklu v souboru šablony

JakubJarabica
Gold Partner | 184
+
0
-

Práve sa mi to stalo a v tomto fragmente kódu:

<script>
	var form = document.forms['frm-UserPanel-login'];
	form.elements['frmlogin-send'].parentNode.parentNode.style.display = 'none';

	var elements = form.getElementsByTagName('input');
	for (i = 0; i < elements.length; i++) {
		if (elements[i].getAttribute('class') == 'onClickSubmit') {
			elements[i].onclick = function () {
				form.submit();
			};
		}
	}
</script>

stačí zmeniť iteračnú premennú z i na j. Neskúmal som, čo je v i.

Nox
Člen | 378
+
0
-

No fakt… zkusil jsem i var, ale taky nic, až přejmenování …možná to s něčím koliduje, jinak mě nenapadá, radši sem to dal na userBarIteration

Díky moc

Mikulas Dite
Člen | 756
+
0
-

Díky, všechno jsem prefixnul a dál to nezkoumal, mělo by to fungovat.

Martin
Člen | 171
+
0
-

Ahoj. Je nějaký důvod k přejmenování třídy UserPanel na User ve verzi 1.1? Aby jely obě verze současně? Musím říci, že mi docela trvalo zjistit, proč mi to nejede, člověk si té změny na první pohled nevšimne. Jinak občas (2× z mnoha spuštění) mi to padá, když tam mám jen button guest a kliknu na něj. Běžím na vlak, takže víc pošlu, až se dostanu k počítači.

Edit: Tak od promazání cache ani jeden pád. Může a nemusí to s tím souviset, kdyby se opět něco objevilo, dám vědět.

Editoval Martin (12. 5. 2011 10:42)

Mikulas Dite
Člen | 756
+
0
-

Přejmenování ve svých jsem udělal v čase, když se měnili i NS v Nette. Důvod je ten, že je to takhle hezčí. Máš pravdu, že jsem to mohl poslat do těch threadů, ale dá se na to přijít docela snadno, tak jsem to změnil jenom v dokumentaci.

Martin
Člen | 171
+
0
-

Ano, dá se na to přijít docela snadno, stačí si přečíst chybovou hlášku. Jenže mě to v ní prostě nepraštilo do očí a hledal jsem problém všude možně pod dojmem předchozích zkušeností s addony v Nette.

Chápu-li to dobře, User už je definitivní vzhledem k namespace. Možná ale namespace Panel a název User může být trochu konfliktní díky obecnosti. Já jsem si zcela nezávisle na tom pojmenoval namespace pro panely samozřejmě také Panel a asi to napadne většinu lidí. Takže možná bych navrhoval UserChange či něco malinko méně obecného, ale záleží na Tobě. Přecijen se tvorbě panelů do DebugBaru nevěnují tisíce programátorů, takže brzké konflikty nehrozí a vždy se to dá schůdně vyřešit.

Ještě – mrkni na možný request , co Ty na to? Mám pocit, že také vytváříš panely nezávislé na aplikaci, podle mě je v takovém případě vhodnější registrace mimo presenter. Nejlépe třeba jen něčím v configu, kdyby se dostala nějaká automatická registrace do distribuce. Ale i v bootstrap.php to ještě relativně nezávislé je, lze to zařídit jednoduše po přidání onPresenter() do Application. Je ale možné, že David chystá úplně jiné řešení, nějaké náznaky jsou (možná to ale jen špatně chápu).

Editoval Martin (12. 5. 2011 21:47)

Mikulas Dite
Člen | 756
+
0
-

Panel\User se používá jenom jednou a to při registraci, takže nemá cenu to dávat do use a potom je to lepší, než jakákoliv jiná varianta. Souhlasím s tím, co psal převážně David v tom obrovském threadu o NS, tohle je ale rozumná výjimka.

O tom requestu vím. Nette by mohlo být s eventy trochu benevolentnější, ale zatím se s tím dá žít. Akorát musíme do BasePresenteru dávat nějaké volání registrací. Když z toho uděláš (nebo někdo jiný) pull request, bude to super, jinak se s tím nic nestane : ).

jasir
Člen | 746
+
0
-

Založil jsem ten pull request, snad je to okej, už jsem utahanej…

https://github.com/…tte/pull/247

Mikulas Dite
Člen | 756
+
0
-

Prima. Akorát to se to se to pustí při každém průběhu a na jednu stránku i několikrát, ale to už se pak dá ošetřit v tom volání a takhle je to očekávané chování.

Co s tím názvem? Možná bych se nebál třeba: onPresenterReady, onPresenterCreated, nebo onBeforeResponse.

jasir
Člen | 746
+
0
-

Název jsem zvolil aby korespondoval s onResponse(), onRequest()…

Martin
Člen | 171
+
0
-

Také jsem to tak přesně měl – původně onPresenterCreated(), později přejmenováno na onPresenter(). Myslím, že je v pořádku, že se to pouští vícekrát. Je to při každém požadavku a teoreticky by téměř všechny mohly směřovat na požadované komponenty, ne?

Martin
Člen | 171
+
0
-

Tak asi nový posun zde. Tiše, promluvil David

Editoval Martin (13. 5. 2011 21:26)