Completed
Push — master ( 5b873e...d824de )
by Alexey
02:27
created

InitController::getRoles()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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