Dostupnost dat pro uzivatele

novacekNette
Člen | 2
+
0
-

Ahoj, jsem v programovani novy. Potreboval bych poradit, jak zaridit dostupnost dat jen pro uzivatele kteremu data patri.
Tzn system pouziva vice uzivatelu, a potrebuji aby se zobrzovaly jen data ktere vytvoril prihlaseny uzivatel. Tabulek je cca 10. Musi kazda tabulka obsahovat userId, ktere je rovno PK z tabulky User? Nebo se to da nejak poresit v Nette?

Kdybych mel v kazde tabulce userId, musel bych kazdy select mit s joinem

Kamil Valenta
Člen | 762
+
+2
-

novacekNette napsal(a):
Musi kazda tabulka obsahovat userId, ktere je rovno PK z tabulky User?

Ano.

Kdybych mel v kazde tabulce userId, musel bych kazdy select mit s joinem

Proč? V identitě máš id, takže ho můžeš dát přímo do where. A i kdyby tam ten join byl, čemu by vadil?

m.brecher
Generous Backer | 758
+
+1
-

@novacekNette

Musi kazda tabulka obsahovat userId, ktere je rovno PK z tabulky User?

musí

Kdybych mel v kazde tabulce userId, musel bych kazdy select mit s joinem

UserId přihlášeného uživatele nemusíš vůbec tahat z databáze a už vůbec není potřeba JOINovat s tabukou user. Nette poskytuje defaultně UserId přihlášeného uživatele v objektu Nette\Security\User, kde je id rovnou k dispozici.

Postup:

Data taháš v modelových třídách. Do každé modelové třídy, kde jsou data těch deseti tabulek předáš konstruktorem Nette\Security\User a id použiješ v metodě where():

class AnyModel
{
    public function __construct(
		private Nette\Database\Explorer $database,
		private Nette\Security\User $user,
	)
    {}

	public function getAll(): Nette\Database\Table\Selection
	{
		return $this->database->table('any_table')->where('user_id', $user->id);
	}

}

novacekNette
Člen | 2
+
0
-

@KamilValenta a @m.brecher mockrat diky. Je pravda ze ten join je zbytecny a muzu pouzit primo where