Pristup k databazi pod jinym uzivatelskym jmenem a heslem nez je v neon
- zacatecnik27
- Člen | 26
V ramci aplikace se mi v urcite chvili dostavaji do rukou prihlasovaci udaje pod kterymi by mela byt resena dalsi komunikace s databazi (SQL triggery a procedury podle toho budou spravne logovat aktivitu daneho uzivatele), jak nejlepe toho dosahnout ? Stavajici databaze kterou pouzivam ma jmeno a heslo nastaveno v neon config, lze ji využít a přimět přehlásit se pod jinými údaji nebo je vhodné vytvořit druhé spojení a inicializovat jej zřejmě na úrovni modelu aplikace ? Mohu požádat o nakopnutí kde takové spojení inicializovat a jak aby následně před jeho použitím bylo možno zadat libovolné přihlašovací údaje. Děkuji za tip
- zacatecnik27
- Člen | 26
dozvim se to na urovni presenteru, de fakto ty udaje prijdou od uzivatele pres formular a action metoda presenteru je zpracovává jako argumenty (tato action metoda provede v modelu nejake upravy a mela by jej primet prehlasit se k db pod jinym uzivatelem a dalsi dotazy uz volat pod nim
- zacatecnik27
- Člen | 26
jenom v ramci toho requestu …
probehne nekolik volani sql procedur pod timto uzivatelem a beh skonci. Pristi db spojeni bude pristupovat opet implicitne nastavenym jmenem/heslem z neonu
Editoval zacatecnik27 (23. 9. 2016 13:32)
- CZechBoY
- Člen | 3608
Budeš muset ručně vytvořit Nette\Database\Context (nebo jakou databázovou vrstvu používáš…). Potom bych ten Context dal jiný třídě a nad instancí tý třídy bych zavolal těch pár příkazů.
Napíšu ti jednoduchou továrničku na Context, kterou registruješ
v konfiguráku jako službu a potom injectneš kam budeš potřebovat.
Potom s tim vytvořeným contextem vytvoříš buď tu novou třídu
(model/repozitář) nebo rovnou uděláš příkazy do db.
use Nette\Database\Connection;
use Nette\Database\Context;
use Nette\Database\IConventions;
use Nette\Database\IStructure;
use Nette\Caching\IStorage;
class ContextFactory
{
public function __construct(IStructure $structure = null, IConventions $conventions = null, IStorage $cacheStorage = null)
{
$this->structure = $structure;
$this->conventions = $conventions;
$this->cacheStorage = $cacheStorage;
}
/**
* @return Context
*/
public function create($dsn, $user = null, $password = null, array $options = null)
{
$connection = new Connection($dsn, $user, $password, $options);
return new Context($connection, $this->structure, $this->conventions, $this->cacheStorage);
}
}
- jiri.pudil
- Nette Blogger | 1032
Pokud potřebuješ jen zavolat pár procedur, mělo by ti dokonce stačit
vytvořit jen Connection
:)