ACL – přidělení práv – Editování vlastních údajů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lopikol
Začátečník | 75
+
0
-

Vytvořil jsem si dynamickou správu jako je tu https://forum.nette.org/…ovozneni-acl, ale narazil jsem na jeden problém.

Mám uživatele s právy Editor, který může jen na Admin:Homepage a Admin:Content.
Rád bych, aby mohl upravit data sám sobě > měl přístup na Admin:Users (action change), ale do jako takového Admin:Users ne. Jednoduše řečeno, může měnit údaje sám sobě, ale ne ostatním.

Peter9
Člen | 69
+
0
-

myslíš vymedziť mu iba action change, j?

lopikol
Začátečník | 75
+
0
-

JJ přesně tak, ale aby v ní mohl měnit jen údaje sobě a ne i ostatním uživatelům.

Peter9
Člen | 69
+
0
-

Údaje o sebe nech si mení u seba: FrontEnd:Users:changeAction() – tam mu môžeš zobraziť čokoľvek.

Budeš to mať oveľa ľahšie.

Editoval Peter9 (15. 2. 2011 11:18)

lopikol
Začátečník | 75
+
0
-

Díky máš recht.

Jak do formuláře přidám do kolonky author nick uživatele, který je právě přihlášen?? Chtěl bych, aby tato konlonka nabyla vidět > jen probehne v pozadí odeslání formuláře.

Editoval lopikol (15. 2. 2011 13:40)

Peter9
Člen | 69
+
0
-
<input type="hidden" value="username" />
lopikol
Začátečník | 75
+
0
-

No ano to znám, ale jak to udělám v nette?
Ikdyž to mámmezi tagy

<?php
{control tinymceForm begin}
//form
{control tinymceForm end}
?>

tak výsledek toho je "" (>nic)??

Nedá se přidat value až někde tady?

<?php
     {$form['nick']->label}
     {$form['nick']->control}
?>

Editoval lopikol (15. 2. 2011 19:58)

Chbox
Člen | 125
+
0
-

Nedá.
musíš ve formu definovat:

...
$form->addHidden('nick', $nick);
...
lopikol
Začátečník | 75
+
0
-

Chbox napsal(a):

Nedá.
musíš ve formu definovat:

...
$form->addHidden('nick', $nick);
...

Tak to netušim jak to udělat, jelikož to co si em dal tam mám, ale bez toho $nick, jelikož to končí chybou, že je nedefinovaný.

Peter9
Člen | 69
+
0
-

$nick je hodnota z inputu, ktorú tam server dosadí.

lopikol
Začátečník | 75
+
0
-

Takhle to funguje parádně :)

<?php
// Presenter
$this->addHidden('nick');

//Template
{$form['nick']->control}
<input type='hidden' name='nick' id='frmtinymceForm-nick' value='{$user->getIdentity()->nick}' />
?>

Editoval lopikol (16. 2. 2011 10:06)

Chbox
Člen | 125
+
0
-

no to máš nějaký divný, plnit by se to mělo v komponentě :-)

...
$form->addHidden('nick', $this->user->identity->nick);
...

a v šabloně už jen:

{var form => control['nazevKomponentyFormulare']}
...
{$form['nick']->control}

ale proč vlastně vypisuješ hidden input??? vždyť ten ti přijde na výstupu :-)

Editoval Chbox (16. 2. 2011 10:22)

lopikol
Začátečník | 75
+
0
-

Chbox: Protože to je jediný způsob, který funguje.

Možná je problém v tom, že formuláře dávám do zvláštních soborů a v presentru jen vytvořim komponentu > Form.
MemberAccessException

Cannot read an undeclared property AdminModule\Forms\TinymceForm::$user.

Chbox
Člen | 125
+
0
-

Tak to máš asi něco blbě..

lopikol
Začátečník | 75
+
0
-

No ale co. Vše funguje jak má. Jen toto ne.

Chbox
Člen | 125
+
0
-

podle mě máš problém se životním cyklem presenteru, když se ti ztrácí proměnné

lopikol
Začátečník | 75
+
0
-

Tak už sem na to přišel.
Správně to má být:

<?php
$this->getPresenter()->user->identity->nick
?>

Editoval lopikol (16. 2. 2011 13:09)

Chbox
Člen | 125
+
0
-

mám za to, že ve ver.2 se dostaneš k userovi přes:

$this->user
Filip Procházka
Moderator | 4668
+
0
-

v presenteru ano, v komponentě musíš přes $this->getPresenter()->getUser()

lopikol
Začátečník | 75
+
0
-

$this->getPresenter()->user->identity->nick je 100% funkční.
$this->getPresenter()->getUser() je prázdné > nic to nevypíše.

Pokud ho dám do templatu místo $user->getIdentity()->nick ,tak to končí chybou:

MemberAccessException

Call to undefined method Nette\Web\User::getUser().