/**
  * @param Collection $currentPermissions
  */
 public static function syncPermissions(Collection $currentPermissions)
 {
     $currentPermissions = $currentPermissions->groupBy('module')->transform(function ($module, $key) {
         $groups = $module->groupBy('group');
         $groups->transform(function ($group, $key) {
             return $group->pluck('action');
         });
         return $groups;
     })->toArray();
     foreach (static::$availablePermissions as $module => $groups) {
         foreach ($groups as $group => $actions) {
             if (!isset($currentPermissions[$module][$group])) {
                 $oldPermissions = [];
                 $newPermissions = $actions;
             } else {
                 $oldPermissions = array_diff($currentPermissions[$module][$group], $actions);
                 $newPermissions = array_diff($actions, $currentPermissions[$module][$group]);
             }
             foreach ($newPermissions as $action) {
                 $permission = new Permission();
                 $permission->module = $module;
                 $permission->group = $group;
                 $permission->action = $action;
                 $permission->save();
             }
             foreach ($oldPermissions as $action) {
                 Permission::where(['action' => $action, 'module' => $module, 'group' => $group])->delete();
             }
         }
     }
 }