<?php
namespace App\Helpers;
class PermissionsChecker
{
/**
* @var array
*/
protected $results = [];
/**
* Set the result array permissions and errors.
*
* @return void
*/
public function __construct()
{
$this->results['permissions'] = [];
$this->results['errors'] = null;
}
/**
* Check for the folders permissions.
*
* @param array $folders
* @return array
*/
public function check(array $folders)
{
foreach ($folders as $folder => $permission) {
if (! ($this->getPermission($folder) >= $permission)) {
$this->addFileAndSetErrors($folder, $permission);
} else {
$this->addFile($folder, $permission, true);
}
}
return $this->results;
}
/**
* Get a folder permission.
*
* @param $folder
* @return string
*/
private function getPermission($folder)
{
return substr(sprintf('%o', fileperms(base_path($folder))), -4);
}
/**
* Add the file to the list of results.
*
* @param $folder
* @param $permission
* @param $isSet
*/
private function addFile($folder, $permission, $isSet)
{
$this->results['permissions'][] = [
'folder' => $folder,
'permission' => $permission,
'isSet' => $isSet,
];
}
/**
* Add the file and set the errors.
*
* @param $folder
* @param $permission
*/
private function addFileAndSetErrors($folder, $permission)
{
$this->addFile($folder, $permission, false);
$this->results['errors'] = true;
}
}