AccessBehavior   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 4
Bugs 2 Features 0
Metric Value
wmc 10
eloc 16
dl 0
loc 62
rs 10
c 4
b 2
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A events() 0 4 1
A processLogout() 0 9 2
A accessAction() 0 4 3
A checkRole() 0 5 2
A checkPermission() 0 5 2
1
<?php
2
3
namespace modules\rbac\components\behavior;
4
5
use Yii;
6
use yii\base\Behavior;
7
use yii\console\Controller;
8
use modules\rbac\Module;
9
10
/**
11
 * Class AccessBehavior
12
 * @package modules\rbac\components\behavior
13
 */
14
class AccessBehavior extends Behavior
15
{
16
    /**
17
     * @var string
18
     */
19
    public $permission = '';
20
21
    /**
22
     * @var string
23
     */
24
    public $role = '';
25
26
    /**
27
     * @inheritdoc
28
     * @return array
29
     */
30
    public function events()
31
    {
32
        return [
33
            Controller::EVENT_BEFORE_ACTION => 'accessAction'
34
        ];
35
    }
36
37
    public function accessAction()
38
    {
39
        if (($this->checkPermission() === false) && ($this->checkRole() === false)) {
40
            $this->processLogout();
41
        }
42
    }
43
44
    /**
45
     * @return bool
46
     */
47
    protected function checkPermission()
48
    {
49
        /** @var yii\web\User $user */
50
        $user = Yii::$app->user;
51
        return !empty($this->permission) && $user->can($this->permission);
52
    }
53
54
    /**
55
     * @return bool
56
     */
57
    protected function checkRole()
58
    {
59
        /** @var yii\web\User $user */
60
        $user = Yii::$app->user;
61
        return !empty($this->role) && $user->can($this->role);
62
    }
63
64
    /**
65
     * Logout and set Flash message
66
     */
67
    private function processLogout()
68
    {
69
        /** @var yii\web\User $user */
70
        $user = Yii::$app->user;
71
        if (!$user->isGuest) {
72
            $user->logout();
73
            /** @var yii\web\Session $session */
74
            $session = Yii::$app->session;
75
            $session->setFlash('error', Module::translate('module', 'You are not allowed access!'));
76
        }
77
    }
78
}
79