Skip to main content

10. Login

Yii heeft al een (beperkte) ingebouwde login. In deze les wordt besproken hoe je dit systeem kan gebruiken.

Role based security

In role based security heeft elke gebruiker een naam en wachtwoord en heeft elke gebruiker ook een rol (role in het Engels). De role bepaald dan wat de gebruiker kan.  Je kunt de rol 'admin' hebben die bijvoorbeeld alles kan en mag. Daarnaast kun je de rol 'user' hebben die bijvoorbeeld alleen bepaalde overzichten kan maken. Een andere rol zou bijvoorbeeld 'docent' kunnen zijn en de docent kan dan bijvoorbeeld cijfers aanpassen. De rol leerling kan dan bijvoorbeeld alleen de cijfers raadplegen.

Model

De file in model 'User.php' bevat de data waarin de users staan. De users staan dus niet in de database. Dat kan wel maar dat kost iets meer tijd en voor het ontwikkelen is het lekker 'makkelijk' om de gebruikers even lokaal aan te maken.

Standaard staat dit in de User.php file

private static $users = [
      '100' => [
          'id' => '100',
          'username' => 'admin',
          'password' => 'admin',
          'authKey' => 'test100key',
          'accessToken' => '100-token',
          'role' => 'admin',
      ],
      '101' => [
          'id' => '101',
          'username' => 'demo',
          'password' => 'demo',
          'authKey' => 'test101key',
          'accessToken' => '101-token',
          'role' => 'user'
      ],
];

Regel 8 en 16 (de 'role') zijn toegevoegd aan de standaard inhoud van de file. In dit voorbeeld zijn er dus twee rollen.

Dit is alles en hiermee kan kan je aanloggen in het Yii systeem.

Functionaliteiten afschermen

In elke controller staat bovenin een function behaviors(). Deze functie regelt de toegang tot de functies. Bijvoorbeeld:

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['POST'],
            ],
        ],
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                // when logged in, any user
                [ 'actions' => ['student','create', 'update-status'],
                    'allow' => true,
                ],
                [ 'actions' => [ 'rolspeler', 'update', 'call-student' ],
                    'allow' => true,
                    'roles' => ['@'],
                    'matchCallback' => function ($rule, $action) {
                        return (Yii::$app->user->identity->role == 'user');
                    }
                    ],
                [ 'actions' => [],
                    'allow' => true,
                    'roles' => ['@'],
                        'matchCallback' => function ($rule, $action) {
                        return (Yii::$app->user->identity->role == 'admin');
                    }
                ],
            ],
        ],
        
    ];
}

Het eerste gedeelte is standaard en daarin wordt bepaald dat een delete alleen mag worden aangeroepen via een POST (en dus niet via een GET). Dit is niet van belang voor onze role based security.

Het gedeelte daaronder is wel van belang. We zien drie blokjes (elk blokje begint met 'actions').

In het eerste blokje wordt bepaald dat als je bent aangelogd dat je dan de functie student, create en update-status mag gebruiken.

Het tweede blokje bepaald dat als je bent aangelogd met de rol user, je de functie rolspeler, update en call-student mag gebruiken.

Het derde blokje bepaald dat je alle acties (dus alle functies) kan  gebruiken als he de rol admin hebt.

Opgave 1

Maak allereerst een menu voor jouw coffee app.

image-1621708382447.png

Kijk in les 3 als je niet meer weet hoe je een menu moet maken.

Opgave 2

Maak nu een drie logins: één admin en twee medewerkers Adam en jane.

Gebruik de volgende gegevens.

id username password authKey accesToken role
100 admin admin123 admin-key admin-token admin
200 Adam geheim adam-key adam-token user
201 Jane wachtwoord jane-key jane-token user

Pas de User.php in models aan. Kijk naar het voorbeeld dat in deze les is beschreven.

Opgave 3