Completed
Push — master ( e1061a...3ea78a )
by Alexey
03:42
created

RbacInit::processInit()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 104
Code Lines 52

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 104
rs 8.2857
cc 1
eloc 52
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace modules\rbac\components;
4
5
use Yii;
6
use modules\rbac\models\Role;
7
use modules\rbac\models\Permission;
8
9
/**
10
 * Class RbacInit
11
 * @package modules\rbac\components
12
 */
13
class RbacInit
14
{
15
    /**
16
     * @return bool
17
     */
18
    public static function processInit()
19
    {
20
        $auth = Yii::$app->authManager;
21
22
        $auth->removeAll(); //На всякий случай удаляем старые данные из БД...
23
24
        // Создадим роли, по умолчанию для новых авторизованных пользователей, default
25
        $super_admin = $auth->createRole(Role::ROLE_SUPER_ADMIN);
26
        $super_admin->description = Role::ROLE_SUPER_ADMIN_DESCRIPTION;
27
28
        $admin = $auth->createRole(Role::ROLE_ADMIN);
29
        $admin->description = Role::ROLE_ADMIN_DESCRIPTION;
30
31
        $manager = $auth->createRole(Role::ROLE_MANAGER);
32
        $manager->description = Role::ROLE_MANAGER_DESCRIPTION;
33
34
        $editor = $auth->createRole(Role::ROLE_EDITOR);
35
        $editor->description = Role::ROLE_EDITOR_DESCRIPTION;
36
37
        $default = $auth->createRole(Role::ROLE_DEFAULT);
38
        $default->description = Role::ROLE_DEFAULT_DESCRIPTION;
39
40
        // запишем их в БД
41
        $auth->add($super_admin);
42
        $auth->add($admin);
43
        $auth->add($manager);
44
        $auth->add($editor);
45
        $auth->add($default);
46
47
        // Создаем наше правило, которое позволит проверить автора по полю author_id
48
        $authorRule = new \modules\rbac\components\AuthorRule;
49
50
        // Запишем их в БД
51
        $auth->add($authorRule);
52
53
        /**
54
         * Создаем разрешения.
55
         */
56
        // Доступ к админке
57
        $viewAdminPage = $auth->createPermission(Permission::PERMISSION_VIEW_ADMIN_PAGE);
58
        $viewAdminPage->description = Permission::PERMISSION_VIEW_ADMIN_PAGE_DESCRIPTION;
59
60
        // Управление RBAC
61
        $managerRbac = $auth->createPermission(Permission::PERMISSION_MANAGER_RBAC);
62
        $managerRbac->description = Permission::PERMISSION_MANAGER_RBAC_DESCRIPTION;
63
64
        // Пользователи
65
        $managerUsers = $auth->createPermission(Permission::PERMISSION_MANAGER_USERS);
66
        $managerUsers->description = Permission::PERMISSION_MANAGER_USERS_DESCRIPTION;
67
68
        // Посты
69
        $managerPosts = $auth->createPermission(Permission::PERMISSION_MANAGER_POST);
70
        $managerPosts->description = Permission::PERMISSION_MANAGER_POST_DESCRIPTION;
71
72
        // Создадим еще новое разрешение «Редактирование собственного поста» и ассоциируем его с правилом AuthorRule
73
        $updateOwnPost = $auth->createPermission(Permission::PERMISSION_UPDATE_OWN_POST);
74
        $updateOwnPost->description = Permission::PERMISSION_UPDATE_OWN_POST_DESCRIPTION;
75
        // Указываем правило AuthorRule для разрешения updateOwnPost.
76
        $updateOwnPost->ruleName = $authorRule->name;
77
78
        // Запишем эти разрешения в БД
79
        $auth->add($viewAdminPage);
80
        $auth->add($managerRbac);
81
        $auth->add($managerUsers);
82
        $auth->add($managerPosts);
83
        $auth->add($updateOwnPost);
84
85
        // Присваиваем разрешения редактору
86
        $auth->addChild($editor, $viewAdminPage);
87
        $auth->addChild($editor, $updateOwnPost);
88
89
        // Присваиваем разрешения менеджеру
90
        $auth->addChild($manager, $viewAdminPage);
91
        $auth->addChild($manager, $managerPosts);
92
93
        // Присваиваем разрешения админу
94
        $auth->addChild($admin, $viewAdminPage);
95
        $auth->addChild($admin, $managerPosts);
96
        $auth->addChild($admin, $managerUsers);
97
98
        // Присваиваем разрешения супер админу
99
        $auth->addChild($super_admin, $viewAdminPage);
100
        $auth->addChild($super_admin, $managerPosts);
101
        $auth->addChild($super_admin, $managerUsers);
102
        $auth->addChild($super_admin, $managerRbac);
103
104
        // Наследуем роли
105
        // редактор наследует роль пользователя default
106
        $auth->addChild($editor, $default);
107
108
        // менеджер наследует роль редактора
109
        $auth->addChild($manager, $editor);
110
111
        // админ наследует роль менеджера
112
        $auth->addChild($admin, $manager);
113
114
        // супер админ наследует роль админа
115
        $auth->addChild($super_admin, $admin);
116
117
        // Привязываем пользователей к ролям
118
        // Назначаем роль super_admin пользователю с ID 1
119
        $auth->assign($super_admin, 1); //Это супер админ
120
121
        return true;
122
    }
123
}
124