Dostupnost dat pro uzivatele
- novacekNette
- Člen | 2
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 | 815
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 | 864
@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
@KamilValenta a @m.brecher mockrat diky. Je pravda ze ten join je zbytecny a muzu pouzit primo where