Nastavení uživatelských rolí

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

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)