Změna přihlášeného usera k mssql databázi (dibi)

MPep
Člen | 7
+
0
-

Zdravím,

Uživatelé se autorizují oproti seznamu uživatelů v tabulce v databázi nebo proti LDAP serveru. Po úspěšné autorizaci protřebuji změnit dibi connection tak aby nebyl přihlášený uživatel k databázi vždy stejný (robot) ale už onen konkrétní.

Nevíte jak do toho?

Díky.

Kamil Valenta
Člen | 481
+
+1
-

Nemít u database service autwiring a instancovat to ručně podle auth. uživatele.

MPep
Člen | 7
+
0
-

Díky,

Mohl bys mě trochu více navést?

Takhle nastavený common.neon:

parameters:
	dbMssql:
		driver: sqlsrv
		host: ****.cz\******
		buffered: TRUE
		username:
		password:
		database: *****
		dbcharset: cp1250
		lazy: TRUE
		autowired: FALSE

services:
	mssql:
		class: Dibi\Connection
		arguments: [%dbMssql%]
		autowired: false

- App\Model\UserManager(@mssql)

Ale v modelu si nejsem jistý jak by měl vypadat constructor

	public function __construct(
		\Dibi\Connection $mssql,
		\Nette\DI\Container $context,
	)
	{
		$this->dibi = $mssql->connect([
			???
		]);
David Grudl
Nette Core | 7569
+
+1
-

Nějak takto:

services:
	mssql:
		factory: MyDibiFactory(%dbMssql%)::create()
class MyDibiFactory
{
	function __construct(array $config, Nette\Security\User $user)
	{
		if ($user->isLoggedIn()) {
			$config['user'] = ...
		}
		$this->config = $config;
	}

	function create(): Dibi\Connection
	{
		return new Dibi\Connection($this->config);
	}
}
MPep
Člen | 7
+
0
-

David Grudl napsal(a):

Nějak takto:

services:
	mssql:
		factory: MyDibiFactory(%dbMssql%)::create()
class MyDibiFactory
{
	function __construct(array $config, Nette\Security\User $user)
	{
		if ($user->isLoggedIn()) {
			$config['user'] = ...
		}
		$this->config = $config;
	}

	function create(): Dibi\Connection
	{
		return new Dibi\Connection($this->config);
	}
}

Super! Díky. Za 5 minut vyřešeno.