Passed
Push — master ( 185461...936e44 )
by Alexey
02:59
created

InitController::actionIndex()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 12
nc 2
nop 0
1
<?php
2
3
namespace modules\rbac\console;
4
5
use Yii;
6
use yii\helpers\ArrayHelper;
7
use yii\console\Controller;
8
use yii\helpers\Console;
9
use modules\rbac\models\Role;
10
use modules\rbac\models\Permission;
11
12
/**
13
 * Class RbacController
14
 * Инициализатор RBAC выполняется в консоли php yii rbac/init
15
 *
16
 * @package console\controllers
17
 */
18
class InitController extends Controller
19
{
20
    const TYPE_ROLE = 'Roles';
21
    const TYPE_PERMISSION = 'Permissions';
22
23
    /**
24
     * Initialize RBAC
25
     */
26
    public function actionIndex()
27
    {
28
        /** @var yii\rbac\DbManager $auth */
29
        $auth = Yii::$app->authManager;
30
        $this->processClear($auth);
31
        $roles = $this->processCreate($auth, $this->getRoles(), self::TYPE_ROLE);
32
        $permissions = $this->processCreate($auth, $this->getPermissions(), self::TYPE_PERMISSION);
33
        $this->processAddPermissionToRoles($auth, $roles, $permissions);
34
        $this->processAddChildRoles($auth, $roles);
35
36
        $role = ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN);
37
        if ($this->processAssignUserToRole($auth, $role, 1)) {
38
            $this->stdout('Done!', Console::FG_GREEN, Console::BOLD);
39
            $this->stdout(PHP_EOL);
40
        } else {
41
            $this->stderr('FAIL', Console::FG_RED, Console::BOLD);
42
        }
43
    }
44
45
    /**
46
     * Clear
47
     *
48
     * @param $auth yii\rbac\ManagerInterface
49
     * @return bool
50
     */
51
    protected function processClear($auth)
52
    {
53
        $auth->removeAll();
54
        return true;
55
    }
56
57
    /**
58
     * Create Roles and Permissions
59
     *
60
     * @param yii\rbac\DbManager $auth
61
     * @param array $array
62
     * @param string $type
63
     * @return array
64
     */
65
    protected function processCreate($auth, $array = [], $type = 'Roles')
66
    {
67
        $result = [];
68
        foreach ($array as $key => $value) {
69
            $result[$key] = ($type === 'Roles') ? $auth->createRole($key) : $auth->createPermission($key);
70
            $result[$key]->description = $value;
71
            // Add rules
72
            if ($key == Permission::PERMISSION_UPDATE_OWN_POST) {
73
                $authorRule = new \modules\rbac\components\AuthorRule;
74
                $auth->add($authorRule);
75
                $result[$key]->ruleName = $authorRule->name;
76
            }
77
            $auth->add($result[$key]);
78
        }
79
        return $result;
80
    }
81
82
    /**
83
     * Add Permissions for Roles
84
     *
85
     * @param yii\rbac\DbManager $auth
86
     * @param array $roles
87
     * @param array $permissions
88
     */
89
    protected function processAddPermissionToRoles($auth, $roles = [], $permissions = [])
90
    {
91
        foreach ($roles as $key => $role) {
92
            switch ($key) {
93
                case Role::ROLE_SUPER_ADMIN:
94
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE));
95
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST));
96
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_USERS));
97
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_RBAC));
98
                    break;
99
                case Role::ROLE_ADMIN:
100
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE));
101
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST));
102
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_USERS));
103
                    break;
104
                case Role::ROLE_MANAGER:
105
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE));
106
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST));
107
                    break;
108
                case Role::ROLE_EDITOR:
109
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE));
110
                    $auth->addChild($role, ArrayHelper::getValue($permissions, Permission::PERMISSION_UPDATE_OWN_POST));
111
                    break;
112
            }
113
        }
114
    }
115
116
    /**
117
     * Add Child role for Roles
118
     *
119
     * @param yii\rbac\DbManager $auth
120
     * @param array $roles
121
     */
122
    protected function processAddChildRoles($auth, $roles = [])
123
    {
124
        foreach ($roles as $key => $role) {
125
            switch ($key) {
126
                case Role::ROLE_EDITOR:
127
                    $auth->addChild($role, ArrayHelper::getValue($roles, Role::ROLE_DEFAULT));
128
                    break;
129
                case Role::ROLE_MANAGER:
130
                    $auth->addChild($role, ArrayHelper::getValue($roles, Role::ROLE_EDITOR));
131
                    break;
132
                case Role::ROLE_ADMIN:
133
                    $auth->addChild($role, ArrayHelper::getValue($roles, Role::ROLE_MANAGER));
134
                    break;
135
                case Role::ROLE_SUPER_ADMIN:
136
                    $auth->addChild($role, ArrayHelper::getValue($roles, Role::ROLE_ADMIN));
137
                    break;
138
            }
139
        }
140
    }
141
142
    /**
143
     * Assign Role to User
144
     *
145
     * @param yii\rbac\DbManager $auth
146
     * @param array $role
147
     * @param int $userId
148
     * @return bool
149
     */
150
    protected function processAssignUserToRole($auth, $role, $userId = 1)
151
    {
152
        $auth->assign($role, $userId);
153
        return true;
154
    }
155
156
    /**
157
     * Roles
158
     *
159
     * @return array
160
     */
161
    protected function getRoles()
162
    {
163
        $roles = [
164
            Role::ROLE_SUPER_ADMIN => Role::ROLE_SUPER_ADMIN_DESCRIPTION,
165
            Role::ROLE_ADMIN => Role::ROLE_ADMIN_DESCRIPTION,
166
            Role::ROLE_MANAGER => Role::ROLE_MANAGER_DESCRIPTION,
167
            Role::ROLE_EDITOR => Role::ROLE_EDITOR_DESCRIPTION,
168
            Role::ROLE_DEFAULT => Role::ROLE_DEFAULT_DESCRIPTION,
169
        ];
170
        return $roles;
171
    }
172
173
    /**
174
     * Permissions
175
     *
176
     * @return array
177
     */
178
    protected function getPermissions()
179
    {
180
        $permissions = [
181
            Permission::PERMISSION_VIEW_ADMIN_PAGE => Permission::PERMISSION_VIEW_ADMIN_PAGE_DESCRIPTION,
182
            Permission::PERMISSION_MANAGER_RBAC => Permission::PERMISSION_MANAGER_RBAC_DESCRIPTION,
183
            Permission::PERMISSION_MANAGER_USERS => Permission::PERMISSION_MANAGER_USERS_DESCRIPTION,
184
            Permission::PERMISSION_MANAGER_POST => Permission::PERMISSION_MANAGER_POST_DESCRIPTION,
185
            Permission::PERMISSION_UPDATE_OWN_POST => Permission::PERMISSION_UPDATE_OWN_POST_DESCRIPTION,
186
        ];
187
        return $permissions;
188
    }
189
}
190