Pristup k databazi pod jinym uzivatelskym jmenem a heslem nez je v neon

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

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

CZechBoY
Člen | 3608
+
+1
-

Kdy a odkud se dozvíš k jaký databázi se máš připojit?

zacatecnik27
Člen | 26
+
0
-

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

CZechBoY
Člen | 3608
+
+1
-

A ty další dotazy se budou volat jen v rámci toh 1 requestu nebo už od tý doby pořád?

zacatecnik27
Člen | 26
+
0
-

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
+
0
-

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
+
0
-

Pokud potřebuješ jen zavolat pár procedur, mělo by ti dokonce stačit vytvořit jen Connection :)