Nastavení uživatelů aby viděli jen určitý obsah

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

Zdravím všechny, zase řeším jeden problém a to přihlášení uživatelů. To funguje naprosto v pořádku, nicméně mě napadlo trochu rozvinout to, co každý z uživatelů vidí. Udělal jsem si pro uživatele skupiny a řeším, jak každému uživateli co se přihlásí na webových stránkách zobrazit jiný obsah (host/admin atd) Funguje mi to tak, že v presenterech ve všech funkcích render mám $user a ověřuji skupinu, nejde to ale udělat nějak globálně pro všechny presentery? Abych to nemusel mít na třeba 30ti místech?

ali
Člen | 342
+
-3
-

Hod to do metody startup.

Pro inspiraci, ja to resim v BasePresenteru nejak takto:

protected function startup()
{
	parent::startup();

	switch ($this->getName()) {
		case "Module:Home":
			// allow home page for all
			break;

		case "Module:Ticket":
		case "Module:Export":
			if (!$this->user->isAllowed("module", "view")) {
				$this->error(NULL, 403);
			}
			break;

		case "Module:Types":
		case "Module:Reasons":
		case "Module:DepartmentCodes":
			if (!$this->user->isAllowed("module", "admin")) {
				$this->error(NULL, 403);
			}
			break;

		default:
			$this->error(NULL, 404);
			break;
	}
}
CZechBoY
Člen | 3608
+
+2
-

Co pouzit opravneni? Tzn. tridu Nette\Security\Permissions, pripafne jinou implementaci IAuthorizator.

Webster.K
Člen | 212
+
0
-

Snažím se jak to jen jde, takže se tím prokousávám :) ještě jedna věc na závěr, jde nějak ještě udělat, aby každý přihlášený uživatel (resp uživatel podle skupiny) viděl třeba v menu jiné odkazy?

CZechBoY
Člen | 3608
+
0
-

@Webster.K jo, pomocí autorizátoru zjistíš jestli má uživatel práva vidět tu stránku a když ne, tak odkaz schováš.

Webster.K
Člen | 212
+
0
-

Ty odkazy vykresluju ale v latte ne? a tam to přeci neověřim, nebo ano? Popř jak?

Jan Mikeš
Člen | 771
+
+1
-

V latte to můžeš ověřit jednoduše, protože je automaticky přítomná proměnná $user, pozor na to aby sis ji někde nepřepsal ;)

{if $user->isAllowed("resource", "privilege")}
	Chráněný obsah
{/if}
Webster.K
Člen | 212
+
0
-

Aha :) to jsem netušil, myslel jsem, že to co do šablony nepošlu přes $this->template->hodnota tak to v ní nebude, děkuju

Jan Mikeš
Člen | 771
+
+1
-

Šablona vytářená defaultní templatefactory má v sobě již obsažené některé proměnné (např $user, $baseUri, $flashes, atd..) doporučuji se kouknout přímo na její kód, ten ti napoví, které proměnné jsou defaultně dostupné, aby sis je nepřepsal: https://api.nette.org/…ory.php.html#89

Webster.K
Člen | 212
+
0
-

Tak se prokousávám dál a narazil jsem na další dvě věci, které s tímto souvisí a zároveň jsem nenašel řešení :/ Již mi fungují role, jejich dědění a další věci (povolený obsah). Nicméně co mi nejde, nebo netuším jak:

  1. aby když role „registrovaný“ dědí od „host“ aby nějaký obsah viděl jen a pouze host? Vidí mi to totiž každá další role co od hosta dědí.
  2. Jde nějak udělat že každý uživatel (když je ve stejné skupině jako ostatní uživatele) viděl jen obsah pro sebe? Dejme tomu že mám roli registrovaný a každému uživateli chci přiřadit jen pro dnešní den něco, aby viděl jen a pouze on a další den uvidí zase něco jinýho, jak toho docílit?
Webster.K
Člen | 212
+
0
-

Tak už dobrý, po skoro půl dni hledání jsem našel $user->isInRole(‚role‘) a tu druhou část přes čisté PHP že si předávám proměnné, nevím jeslti je to ideální způsob, ale kdyby měl někdo lepší nápad, sem s ní :)

ViPEr*CZ*
Člen | 818
+
0
-

Jan Mikeš napsal(a):

Šablona vytářená defaultní templatefactory má v sobě již obsažené některé proměnné (např $user, $baseUri, $flashes, atd..) doporučuji se kouknout přímo na její kód, ten ti napoví, které proměnné jsou defaultně dostupné, aby sis je nepřepsal: https://api.nette.org/…ory.php.html#89

Jo jo nedávno se mi povedlo udělat si třeba persistentní parametr v Presenteru a jmenoval se name. A pak se spolehni v šabloně na to, aby se dívala na name daného control :-) No stane se.