InitController   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 206
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
wmc 13
eloc 84
c 4
b 0
f 1
dl 0
loc 206
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A processInit() 0 14 1
A processAssignUserToRole() 0 4 1
A getRoles() 0 4 1
A processAddPermissionToRoles() 0 52 1
A getPermissions() 0 4 1
A actionIndex() 0 13 2
A processAddChildRoles() 0 20 1
A processCreate() 0 15 4
A processClear() 0 4 1
1
<?php
2
3
namespace modules\rbac\console;
4
5
use Exception;
6
use modules\rbac\components\AuthorRule;
7
use Yii;
8
use yii\helpers\ArrayHelper;
9
use yii\console\Controller;
10
use app\components\helpers\Console;
11
use modules\rbac\models\Role;
12
use modules\rbac\models\Permission;
13
use modules\rbac\Module;
14
15
/**
16
 * Class RbacController
17
 * Инициализатор RBAC выполняется в консоли php yii rbac/init
18
 *
19
 * @package console\controllers
20
 *
21
 * @property-read array $permissions
22
 * @property-read array $roles
23
 */
24
class InitController extends Controller
25
{
26
    const TYPE_ROLE = 'Roles';
27
    const TYPE_PERMISSION = 'Permissions';
28
29
    /**
30
     * Initialize RBAC
31
     */
32
    public function actionIndex()
33
    {
34
        if ($this->processInit()) {
35
            $this->stdout(Console::convertEncoding(Module::t(
36
                'module',
37
                'Done!'
38
            )), Console::FG_GREEN, Console::BOLD);
39
            $this->stdout(PHP_EOL);
40
        } else {
41
            $this->stderr(Console::convertEncoding(Module::t(
42
                'module',
43
                'Fail!'
44
            )), Console::FG_RED, Console::BOLD);
45
        }
46
    }
47
48
    /**
49
     * @return bool
50
     * @throws Exception
51
     */
52
    public function processInit()
53
    {
54
        /** @var yii\rbac\ManagerInterface|yii\rbac\BaseManager|yii\rbac\DbManager|yii\rbac\PhpManager $auth */
55
        $auth = Yii::$app->authManager;
56
        $this->processClear($auth);
57
        $roles = $this->processCreate($auth, $this->getRoles(), self::TYPE_ROLE);
58
        $permissions = $this->processCreate($auth, $this->getPermissions(), self::TYPE_PERMISSION);
59
        $this->processAddPermissionToRoles($auth, $roles, $permissions);
60
        // Inheritance of roles - If you uncomment, the roles are inherited
61
        //$this->processAddChildRoles($auth, $roles);
62
63
        // Assign a super administrator role to the user from id 1
64
        $role = ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN);
65
        return $this->processAssignUserToRole($auth, $role, 1);
66
    }
67
68
    /**
69
     * Clear
70
     *
71
     * @param $auth yii\rbac\ManagerInterface
72
     * @return bool
73
     */
74
    protected function processClear($auth)
75
    {
76
        $auth->removeAll();
77
        return true;
78
    }
79
80
    /**
81
     * Create Roles and Permissions
82
     *
83
     * @param object $auth
84
     * @param array $array
85
     * @param string $type
86
     * @return array
87
     */
88
    protected function processCreate($auth, $array = [], $type = self::TYPE_ROLE)
89
    {
90
        $result = [];
91
        foreach ($array as $key => $value) {
92
            $result[$key] = ($type === self::TYPE_ROLE) ? $auth->createRole($key) : $auth->createPermission($key);
93
            $result[$key]->description = Module::t('module', $value);
94
            // Add rules
95
            if ($key == Permission::PERMISSION_UPDATE_OWN_POST) {
96
                $authorRule = new AuthorRule;
97
                $auth->add($authorRule);
98
                $result[$key]->ruleName = $authorRule->name;
99
            }
100
            $auth->add($result[$key]);
101
        }
102
        return $result;
103
    }
104
105
    /**
106
     * Add Permissions for Roles
107
     *
108
     * @param object $auth
109
     * @param array $roles
110
     * @param array $permissions
111
     * @throws Exception
112
     */
113
    protected function processAddPermissionToRoles($auth, $roles = [], $permissions = [])
114
    {
115
        // ROLE_SUPER_ADMIN
116
        $auth->addChild(
117
            ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
118
            ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE)
119
        );
120
        $auth->addChild(
121
            ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
122
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST)
123
        );
124
        $auth->addChild(
125
            ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
126
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_USERS)
127
        );
128
        $auth->addChild(
129
            ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
130
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_RBAC)
131
        );
132
133
        // ROLE_ADMIN
134
        $auth->addChild(
135
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN),
136
            ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE)
137
        );
138
        $auth->addChild(
139
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN),
140
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST)
141
        );
142
        $auth->addChild(
143
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN),
144
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_USERS)
145
        );
146
147
        // ROLE_MANAGER
148
        $auth->addChild(
149
            ArrayHelper::getValue($roles, Role::ROLE_MANAGER),
150
            ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE)
151
        );
152
        $auth->addChild(
153
            ArrayHelper::getValue($roles, Role::ROLE_MANAGER),
154
            ArrayHelper::getValue($permissions, Permission::PERMISSION_MANAGER_POST)
155
        );
156
157
        // ROLE_EDITOR
158
        $auth->addChild(
159
            ArrayHelper::getValue($roles, Role::ROLE_EDITOR),
160
            ArrayHelper::getValue($permissions, Permission::PERMISSION_VIEW_ADMIN_PAGE)
161
        );
162
        $auth->addChild(
163
            ArrayHelper::getValue($roles, Role::ROLE_EDITOR),
164
            ArrayHelper::getValue($permissions, Permission::PERMISSION_UPDATE_OWN_POST)
165
        );
166
    }
167
168
    /**
169
     * Add Child role for Roles
170
     *
171
     * @param object $auth
172
     * @param array $roles
173
     */
174
    protected function processAddChildRoles($auth, $roles = [])
175
    {
176
        $auth->addChild(
177
            ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
178
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN)
179
        );
180
181
        $auth->addChild(
182
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN),
183
            ArrayHelper::getValue($roles, Role::ROLE_MANAGER)
184
        );
185
186
        $auth->addChild(
187
            ArrayHelper::getValue($roles, Role::ROLE_MANAGER),
188
            ArrayHelper::getValue($roles, Role::ROLE_EDITOR)
189
        );
190
191
        $auth->addChild(
192
            ArrayHelper::getValue($roles, Role::ROLE_EDITOR),
193
            ArrayHelper::getValue($roles, Role::ROLE_DEFAULT)
194
        );
195
    }
196
197
    /**
198
     * Assign Role to User
199
     * @param object $auth
200
     * @param array $role
201
     * @param int $userId
202
     * @return bool
203
     */
204
    protected function processAssignUserToRole($auth, $role, $userId = 1)
205
    {
206
        $auth->assign($role, $userId);
207
        return true;
208
    }
209
210
    /**
211
     * Roles
212
     *
213
     * @return array
214
     */
215
    protected function getRoles()
216
    {
217
        $role = new Role();
218
        return $role->getRolesArray();
219
    }
220
221
    /**
222
     * Permissions
223
     *
224
     * @return array
225
     */
226
    protected function getPermissions()
227
    {
228
        $permission = new Permission();
229
        return $permission->getPermissionsArray();
230
    }
231
}
232