Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
13 / 13 |
CRAP | |
100.00% |
16 / 16 |
| PermissionHelper | |
100.00% |
1 / 1 |
|
100.00% |
13 / 13 |
25 | |
100.00% |
16 / 16 |
| __construct($uid = null, $gid = null) | |
100.00% |
1 / 1 |
5 | |
100.00% |
3 / 3 |
|||
| userIsOwner() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| userCanRead() | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| userCanWrite() | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| groupIsOwner() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| groupCanRead() | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| groupCanWrite() | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| worldCanRead() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| worldCanWrite() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| isReadable() | |
100.00% |
1 / 1 |
3 | |
100.00% |
1 / 1 |
|||
| isWritable() | |
100.00% |
1 / 1 |
3 | |
100.00% |
1 / 1 |
|||
| userIsRoot() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setNode($node) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| <?php | |
| /* | |
| * This file is part of the php-vfs package. | |
| * | |
| * (c) Michael Donat <michael.donat@me.com> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace VirtualFileSystem\Wrapper; | |
| use VirtualFileSystem\Structure\Node; | |
| /** | |
| * Class to encapsulate permission checks | |
| * | |
| * @author Michael Donat <michael.donat@me.com> | |
| * @package php-vfs | |
| * @api | |
| */ | |
| class PermissionHelper | |
| { | |
| const MODE_USER_READ = 0400; | |
| const MODE_USER_WRITE = 0200; | |
| const MODE_GROUP_READ = 0040; | |
| const MODE_GROUP_WRITE = 0020; | |
| const MODE_WORLD_READ = 0004; | |
| const MODE_WORLD_WRITE = 0002; | |
| /** | |
| * @var Node | |
| */ | |
| protected $node; | |
| protected $userid; | |
| protected $groupid; | |
| /** | |
| * @param int $uid | |
| * @param int $gid | |
| */ | |
| public function __construct($uid = null, $gid = null) | |
| { | |
| $this->userid = is_null($uid) ? (function_exists('posix_getuid') ? posix_getuid() : 0) : $uid; | |
| $this->groupid = is_null($gid) ? ((function_exists('posix_getgid') ? posix_getgid() : 0)) : $gid; | |
| } | |
| /** | |
| * Checks whether user_id on file is the same as executing user | |
| * | |
| * @return bool | |
| */ | |
| public function userIsOwner() | |
| { | |
| return (bool) ($this->userid == $this->node->user()); | |
| } | |
| /** | |
| * Checks whether file is readable for user | |
| * | |
| * @return bool | |
| */ | |
| public function userCanRead() | |
| { | |
| return $this->userIsOwner() && ($this->node->mode() & self::MODE_USER_READ); | |
| } | |
| /** | |
| * Checks whether file is writable for user | |
| * | |
| * @return bool | |
| */ | |
| public function userCanWrite() | |
| { | |
| return $this->userIsOwner() && ($this->node->mode() & self::MODE_USER_WRITE); | |
| } | |
| /** | |
| * Checks whether group_id on file is the same as executing user | |
| * | |
| * @return bool | |
| */ | |
| public function groupIsOwner() | |
| { | |
| return (bool) ($this->groupid == $this->node->group()); | |
| } | |
| /** | |
| * Checks whether file is readable for group | |
| * | |
| * @return bool | |
| */ | |
| public function groupCanRead() | |
| { | |
| return $this->groupIsOwner() && ($this->node->mode() & self::MODE_GROUP_READ); | |
| } | |
| /** | |
| * Checks whether file is writable for group | |
| * | |
| * @return bool | |
| */ | |
| public function groupCanWrite() | |
| { | |
| return $this->groupIsOwner() && ($this->node->mode() & self::MODE_GROUP_WRITE); | |
| } | |
| /** | |
| * Checks whether file is readable for world | |
| * | |
| * @return bool | |
| */ | |
| public function worldCanRead() | |
| { | |
| return (bool) ($this->node->mode() & self::MODE_WORLD_READ); | |
| } | |
| /** | |
| * Checks whether file is writable for world | |
| * | |
| * @return bool | |
| */ | |
| public function worldCanWrite() | |
| { | |
| return (bool) ($this->node->mode() & self::MODE_WORLD_WRITE); | |
| } | |
| /** | |
| * Checks whether file is readable (by user, group or world) | |
| * | |
| * @return bool | |
| */ | |
| public function isReadable() | |
| { | |
| return $this->userCanRead() || $this->groupCanRead() || $this->worldCanRead(); | |
| } | |
| /** | |
| * Checks whether file is writable (by user, group or world) | |
| * | |
| * @return bool | |
| */ | |
| public function isWritable() | |
| { | |
| return $this->userCanWrite() || $this->groupCanWrite() || $this->worldCanWrite(); | |
| } | |
| /** | |
| * Checks whether userid is 0 - root. | |
| * | |
| * @return bool | |
| */ | |
| public function userIsRoot() | |
| { | |
| return $this->userid == 0; | |
| } | |
| /** | |
| * @param \VirtualFileSystem\Structure\Node $node | |
| * | |
| * @return PermissionHelper | |
| */ | |
| public function setNode($node) | |
| { | |
| $this->node = $node; | |
| return $this; | |
| } | |
| } |