Skip to content

Commit 60ef146

Browse files
committed
Added add and remove methods to Permissions class
1 parent 8681cd8 commit 60ef146

3 files changed

Lines changed: 97 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
* Now possible to define custom input/output value objects for the query builder.
1010
* Added a `EventStream` response sender to simplify sending [sever-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events).
1111
* Permission calculations now fully support special bits (sticky, setgid and setuid).
12+
* Added the following methods to the `Permissions` class:
13+
- `add`
14+
- `remove`
1215

1316
#### Deprecations
1417

src/mako/file/Permissions.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,32 @@ public static function fromInt(int $permissions): static
7373
return new static(...$permission);
7474
}
7575

76+
/**
77+
* Add permission.
78+
*
79+
* @return $this
80+
*/
81+
public function add(Permission ...$permissions): static
82+
{
83+
$this->permissions = [...$this->permissions, ...$permissions];
84+
85+
return $this;
86+
}
87+
88+
/**
89+
* Remove permission.
90+
*
91+
* @return $this
92+
*/
93+
public function remove(Permission ...$permissions): static
94+
{
95+
foreach ($permissions as $permission) {
96+
$this->permissions = array_filter($this->permissions, fn ($value) => $value !== $permission);
97+
}
98+
99+
return $this;
100+
}
101+
76102
/**
77103
* Returns the permissions.
78104
*

tests/unit/file/PermissionsTest.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,4 +358,72 @@ public function testToRwxString(): void
358358

359359
$this->assertSame('r-Sr-Sr-T', $permissions->toRwxString());
360360
}
361+
362+
/**
363+
*
364+
*/
365+
public function testAdd(): void
366+
{
367+
$permissions = new Permissions;
368+
369+
$this->assertSame(0o0000, $permissions->toInt());
370+
371+
//
372+
373+
$this->assertInstanceOf(Permissions::class, $permissions->add(Permission::OWNER_FULL));
374+
375+
$this->assertSame(0o0700, $permissions->toInt());
376+
377+
//
378+
379+
$permissions->add(Permission::OWNER_FULL);
380+
381+
$this->assertSame(0o0700, $permissions->toInt());
382+
383+
//
384+
385+
$permissions->add(Permission::GROUP_FULL);
386+
387+
$this->assertSame(0o0770, $permissions->toInt());
388+
389+
//
390+
391+
$permissions->add(Permission::PUBLIC_READ, Permission::PUBLIC_WRITE, Permission::PUBLIC_EXECUTE);
392+
393+
$this->assertSame(0o0777, $permissions->toInt());
394+
}
395+
396+
/**
397+
*
398+
*/
399+
public function testRemove(): void
400+
{
401+
$permissions = Permissions::fromInt(0o777);
402+
403+
$this->assertSame(0o0777, $permissions->toInt());
404+
405+
//
406+
407+
$this->assertInstanceOf(Permissions::class, $permissions->remove(Permission::PUBLIC_WRITE));
408+
409+
$this->assertSame(0o0775, $permissions->toInt());
410+
411+
//
412+
413+
$permissions->remove(Permission::PUBLIC_WRITE);
414+
415+
$this->assertSame(0o0775, $permissions->toInt());
416+
417+
//
418+
419+
$permissions->remove(Permission::GROUP_WRITE);
420+
421+
$this->assertSame(0o0755, $permissions->toInt());
422+
423+
//
424+
425+
$permissions->remove(Permission::PUBLIC_EXECUTE, Permission::GROUP_EXECUTE);
426+
427+
$this->assertSame(0o0744, $permissions->toInt());
428+
}
361429
}

0 commit comments

Comments
 (0)