/**
  * @inheritdoc
  */
 public function up()
 {
     // deleting users module settings
     Permission::deleteAll();
     AuthItemGroup::deleteAll();
     Route::refreshRoutes();
     // create basic application roles
     foreach ($this->roles as $name => $description) {
         Role::create($name, $description);
     }
     $group = new AuthItemGroup();
     $group->name = 'Frontend common permission';
     $group->code = Yii::$app->getModule('users')->commonPermissionName;
     $group->save(false);
     Permission::create(Yii::$app->getModule('users')->commonPermissionName, null, $group->code);
     // frontend profile management permissions
     $group = new AuthItemGroup();
     $group->name = 'Frontend - менеджмент профилей';
     $group->code = 'frontendProfileManagement';
     $group->save(false);
     Permission::create('frontendProfileView', 'Frontend - Просмотр профиля', $group->code);
     Permission::create('frontendProfileUpdate', 'Frontend - Обновление профиля', $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendProfileView', ['frontend /profile/view'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendProfileUpdate', ['frontend /profile/update'], null, $group->code);
     // frontend advert management permissions
     $group = new AuthItemGroup();
     $group->name = 'Frontend - менеджмент объявлений';
     $group->code = 'frontendAdvertManagement';
     $group->save(false);
     Permission::create('frontendAdvertCreate', 'Frontend - Создание объявления', $group->code);
     Permission::create('frontendAdvertDelete', 'Frontend - Удаление объявления', $group->code);
     Permission::create('frontendAdvertList', 'Frontend - Просмотр списка объявлений', $group->code);
     Permission::create('frontendAdvertUpdate', 'Frontend - Обновление объявления', $group->code);
     Permission::create('frontendAdvertView', 'Frontend - Просмотр объявления', $group->code);
     Permission::create('frontendAdvertPublished', 'Frontend - Список опубликованных объявлений', $group->code);
     Permission::create('frontendAdvertBookmarks', 'Frontend - Список объявлений в заметках', $group->code);
     Role::assignRoutesViaPermission('Guest', 'frontendAdvertView', ['frontend /advert/view'], null, $group->code);
     Role::assignRoutesViaPermission('Guest', 'frontendAdvertList', ['frontend /advert/list'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertCreate', ['frontend /advert/create'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertDelete', ['frontend /advert/update'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertList', ['frontend /advert/delete'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertList', ['frontend /advert/published'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertUpdate', ['frontend /advert/update'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendAdvertView', ['frontend /advert/bookmarks'], null, $group->code);
     // frontend file management permissions
     Permission::create('frontendFileDelete', 'Frontend - Удаление файла', $group->code);
     Permission::create('frontendFileUpload', 'Frontend - Загрузка файла', $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendFileUpload', ['frontend /file/upload'], null, $group->code);
     Role::assignRoutesViaPermission('ServiceUser', 'frontendFileDelete', ['frontend /file/delete'], null, $group->code);
     // backend common permissions
     $group = new AuthItemGroup();
     $group->name = 'Backend common permission';
     $group->code = Yii::$app->getModule('users')->backendCommonPermissionName;
     $group->save(false);
     Permission::create(Yii::$app->getModule('users')->backendCommonPermissionName, null, $group->code);
     /*$group = new AuthItemGroup();
             $group->name = 'Backend - менеджмент объявлений';
             $group->code = 'backendAdvertManagement';
             $group->save(false);
     
             Permission::create('backendAdvertCreate', 'Backend - Создание объявления', $group->code);
             Permission::create('backendAdvertDelete', 'Backend - Удаление объявления', $group->code);
             Permission::create('backendAdvertList', 'Backend - Просмотр списка объявлений', $group->code);
             Permission::create('backendAdvertUpdate', 'Backend - Обновление объявления', $group->code);
             Permission::create('backendAdvertView', 'Backend - Просмотр объявления', $group->code);
     
             Permission::create('backendCategoryCreate', 'Backend - Создание категории', $group->code);
             Permission::create('backendCategoryDelete', 'Backend - Удаление категории', $group->code);
             Permission::create('backendCategoryList', 'Backend - Просмотр списка категорий', $group->code);
             Permission::create('backendCategoryUpdate', 'Backend - Обновление категории', $group->code);
             Permission::create('backendCategoryView', 'Backend - Просмотр категории', $group->code);
     
             Permission::create('backendCityCreate', 'Backend - Создание города', $group->code);
             Permission::create('backendCityDelete', 'Backend - Удаление города', $group->code);
             Permission::create('backendCityList', 'Backend - Просмотр списка городов', $group->code);
             Permission::create('backendCityUpdate', 'Backend - Обновление города', $group->code);
             Permission::create('backendCityView', 'Backend - Просмотр города', $group->code);
     
             Permission::create('backendUserCreate', 'Backend - Создание пользователя', $group->code);
             Permission::create('backendUserDelete', 'Backend - Удаление пользователя', $group->code);
             Permission::create('backendUserList', 'Backend - Просмотр списка пользователей', $group->code);
             Permission::create('backendUserUpdate', 'Backend - Обновление пользователя', $group->code);
             Permission::create('backendUserView', 'Backend - Просмотр пользователя', $group->code);
     
             Permission::create('backendUserCreate', 'Backend - Создание пользователя', $group->code);
             Permission::create('backendUserDelete', 'Backend - Удаление пользователя', $group->code);
             Permission::create('backendUserList', 'Backend - Просмотр списка пользователей', $group->code);
             Permission::create('backendUserUpdate', 'Backend - Обновление пользователя', $group->code);
             Permission::create('backendUserView', 'Backend - Просмотр пользователя', $group->code);*/
 }
 /**
  * Useful for Menu widget
  *
  * <example>
  * 	...
  * 		[ 'label'=>'Some label', 'url'=>['/site/index'], 'visible'=>User::canRoute(['/site/index']) ]
  * 	...
  * </example>
  *
  * @param string|array $route
  * @param bool         $superAdminAllowed
  *
  * @return bool
  */
 public static function canRoute($route, $superAdminAllowed = true)
 {
     if ($superAdminAllowed and Yii::$app->user->isSuperadmin) {
         return true;
     }
     $baseRoute = AuthHelper::unifyRoute($route);
     if (Route::isFreeAccess($baseRoute)) {
         return true;
     }
     AuthHelper::ensurePermissionsUpToDate();
     return Route::isRouteAllowed($baseRoute, Yii::$app->session->get(AuthHelper::SESSION_PREFIX_ROUTES, []));
 }