Passed
Push — master ( 934a0e...6b28ff )
by Alexey
03:07
created

InitController   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 167
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 17
dl 0
loc 167
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A actionIndex() 0 16 2
A processCreate() 0 15 4
A processClear() 0 4 1
B processAddPermissionToRoles() 0 25 6
A processAssignUserToRole() 0 4 1
A getRoles() 0 10 1
A getPermissions() 0 10 1
A processAddChildRoles() 0 13 1
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
                default:
113
                    break;
114
            }
115
        }
116
    }
117
118
    /**
119
     * Add Child role for Roles
120
     *
121
     * @param yii\rbac\DbManager $auth
122
     * @param array $roles
123
     */
124
    protected function processAddChildRoles($auth, $roles = [])
125
    {
126
        $auth->addChild(ArrayHelper::getValue($roles, Role::ROLE_SUPER_ADMIN),
127
            ArrayHelper::getValue($roles, Role::ROLE_ADMIN));
128
129
        $auth->addChild(ArrayHelper::getValue($roles, Role::ROLE_ADMIN),
130
            ArrayHelper::getValue($roles, Role::ROLE_MANAGER));
131
132
        $auth->addChild(ArrayHelper::getValue($roles, Role::ROLE_MANAGER),
133
            ArrayHelper::getValue($roles, Role::ROLE_EDITOR));
134
135
        $auth->addChild(ArrayHelper::getValue($roles, Role::ROLE_EDITOR),
136
            ArrayHelper::getValue($roles, Role::ROLE_DEFAULT));
137
    }
138
139
    /**
140
     * Assign Role to User
141
     *
142
     * @param yii\rbac\DbManager $auth
143
     * @param array $role
144
     * @param int $userId
145
     * @return bool
146
     */
147
    protected function processAssignUserToRole($auth, $role, $userId = 1)
148
    {
149
        $auth->assign($role, $userId);
150
        return true;
151
    }
152
153
    /**
154
     * Roles
155
     *
156
     * @return array
157
     */
158
    protected function getRoles()
159
    {
160
        $roles = [
161
            Role::ROLE_SUPER_ADMIN => Role::ROLE_SUPER_ADMIN_DESCRIPTION,
162
            Role::ROLE_ADMIN => Role::ROLE_ADMIN_DESCRIPTION,
163
            Role::ROLE_MANAGER => Role::ROLE_MANAGER_DESCRIPTION,
164
            Role::ROLE_EDITOR => Role::ROLE_EDITOR_DESCRIPTION,
165
            Role::ROLE_DEFAULT => Role::ROLE_DEFAULT_DESCRIPTION,
166
        ];
167
        return $roles;
168
    }
169
170
    /**
171
     * Permissions
172
     *
173
     * @return array
174
     */
175
    protected function getPermissions()
176
    {
177
        $permissions = [
178
            Permission::PERMISSION_VIEW_ADMIN_PAGE => Permission::PERMISSION_VIEW_ADMIN_PAGE_DESCRIPTION,
179
            Permission::PERMISSION_MANAGER_RBAC => Permission::PERMISSION_MANAGER_RBAC_DESCRIPTION,
180
            Permission::PERMISSION_MANAGER_USERS => Permission::PERMISSION_MANAGER_USERS_DESCRIPTION,
181
            Permission::PERMISSION_MANAGER_POST => Permission::PERMISSION_MANAGER_POST_DESCRIPTION,
182
            Permission::PERMISSION_UPDATE_OWN_POST => Permission::PERMISSION_UPDATE_OWN_POST_DESCRIPTION,
183
        ];
184
        return $permissions;
185
    }
186
}
187