Nastavení uživatelských rolí
- andrstom
- Člen | 21
Ahoj, jako správný nette začátečník bych potřeboval radu.
Mám tabulky users
, role
, privilege
,
…
users → id (PRIMARY), login, username, role_id, …
role → id (PRIMARY), role_short, role_name, privilege_id, …
privilege → id (PRIMARY), privilege_short, privilege_name, …
a chtěl bych aby uživatel mohl mít několik rolí a role mohla mohla mít
několik privilegií, … Moje myšlenka byla taková, že bych při vložení
uživatele vložil (formou checkboxu ve formuláři) do sloupce
role_id
seznam id
dostupných rolí (např.:
1,2,5,8
…). Podobně by to bylo s nastavením role.
Pokud bych dal uživateli jednu roli a budu chtít znát její zkratku
(role.role_short
) tak v si v šabloně zavolám
{$client->ref(‚role‘, ‚role_id‘)->role_short}.
Funkční příklad:
Presenter
<?php
namespace App\Presenters;
use Nette;
use Nette\Security\User;
use Nette\Application\UI;
use Nette\Application\UI\Form;
use Nette\Database\Table\Selection;
class SettingsPresenter extends BasePresenter
{
private $users;
/**
* @var Nette\Database\Context
*/
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderUserlist()
{
$users = $this->database->table('users')->order('id DESC');
$this->template->userlist = $users;
}
}
Šablona
<table id="table-standard" class="display">
<thead>
<th>Jméno</th>
<th>Login</th>
<th>Role</th>
</thead>
<tbody>
<tr n:foreach="$userlist as $client" class="client">
<td>{$client->username}</td>
<td>{$client->login}</td>
<td>{$client->ref('role', 'role_id')->role_short}</td>
</tr>
</tbody>
</table>
Jak to celé upravit, aby se mi dotahovali zkratky všech dostupných rolí, když je mám uložený v řetězci (1,2,5, …)? Je toto řešení vůbec vhodné? Rád se inspiruju i jiným návrhem, tak aby to bylo co možná nejelegantnější.
Taky kvůli dynamickému sestavení ACL.
Děkuji za nápady, snad jsem se vymáčkl srozumitelně;-)
Editoval andrstom (6. 9. 2017 12:42)