-
-
Notifications
You must be signed in to change notification settings - Fork 187
/
PrivilegePermissionResult.php
110 lines (93 loc) · 2.5 KB
/
PrivilegePermissionResult.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
namespace Neos\Flow\Security\Authorization;
use Neos\Flow\Security\Authorization\Privilege\Parameter\PrivilegeParameterInterface;
use Neos\Flow\Security\Authorization\Privilege\PrivilegeInterface;
/**
*
*/
class PrivilegePermissionResult
{
/**
* @var int
*/
protected $denies = 0;
/**
* @var int
*/
protected $grants = 0;
/**
* @var int
*/
protected $abstains = 0;
/**
* @var array
*/
protected $effectivePrivilegeIdentifiersWithPermission = [];
/**
* PrivilegePermissionResult constructor.
*
* @param int $denies
* @param int $grants
* @param int $abstains
*/
public function __construct(int $denies = 0, int $grants = 0, int $abstains = 0)
{
$this->denies = $denies;
$this->grants = $grants;
$this->abstains = $abstains;
}
/**
* @param PrivilegeInterface $privilege
* @return PrivilegePermissionResult
*/
public function withPrivilege(PrivilegeInterface $privilege = null): PrivilegePermissionResult
{
$newResult = clone $this;
if ($privilege === null) {
return $newResult;
}
if ($privilege->isGranted()) {
$newResult->grants++;
}
if ($privilege->isDenied()) {
$newResult->denies++;
}
if ($privilege->isAbstained()) {
$newResult->abstains++;
}
$parameterStrings = array_map(function (PrivilegeParameterInterface $parameter) {
return sprintf('%s: "%s"', $parameter->getName(), $parameter->getValue());
}, $privilege->getParameters());
$privilegeName = $privilege->getPrivilegeTargetIdentifier() . ($parameterStrings !== [] ? ' (with parameters: ' . implode(', ', $parameterStrings) . ')' : '');
$newResult->effectivePrivilegeIdentifiersWithPermission[] = sprintf('"%s": %s', $privilegeName, strtoupper($privilege->getPermission()));
return $newResult;
}
/**
* @return int
*/
public function getDenies(): int
{
return $this->denies;
}
/**
* @return int
*/
public function getGrants(): int
{
return $this->grants;
}
/**
* @return int
*/
public function getAbstains(): int
{
return $this->abstains;
}
/**
* @return array
*/
public function getEffectivePrivilegeIdentifiersWithPermission(): array
{
return $this->effectivePrivilegeIdentifiersWithPermission;
}
}