PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Access / CapabilitiesProvider.php
matomo / app / core / Access Last commit date
Role 6 months ago CapabilitiesProvider.php 3 months ago Capability.php 6 months ago Role.php 2 years ago RolesProvider.php 1 year ago
CapabilitiesProvider.php
124 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\Access;
10
11 use Exception;
12 use Piwik\CacheId;
13 use Piwik\Piwik;
14 use Piwik\Cache as PiwikCache;
15 class CapabilitiesProvider
16 {
17 /**
18 * @return Capability[]
19 * @throws Exception
20 */
21 public function getAllCapabilities() : array
22 {
23 $cacheId = CacheId::siteAware(CacheId::languageAware('Capabilities'));
24 $cache = PiwikCache::getTransientCache();
25 if (!$cache->contains($cacheId)) {
26 /** @var Capability[] $capabilities */
27 $capabilities = [];
28 /**
29 * Triggered to add new capabilities.
30 *
31 * **Example**
32 *
33 * public function addCapabilities(&$capabilities)
34 * {
35 * $capabilities[] = new MyNewCapability();
36 * }
37 *
38 * @param Capability[] $reports An array of reports
39 * @internal
40 */
41 Piwik::postEvent('Access.Capability.addCapabilities', array(&$capabilities));
42 /**
43 * Triggered to filter / restrict capabilities.
44 *
45 * **Example**
46 *
47 * public function filterCapabilities(&$capabilities)
48 * {
49 * foreach ($capabilities as $index => $capability) {
50 * if ($capability->getId() === 'tagmanager_write') {}
51 * unset($capabilities[$index]); // remove the given capability
52 * }
53 * }
54 * }
55 *
56 * @param Capability[] $reports An array of reports
57 * @internal
58 */
59 Piwik::postEvent('Access.Capability.filterCapabilities', array(&$capabilities));
60 $capabilities = \array_values($capabilities);
61 $this->checkCapabilityIds($capabilities);
62 $cache->save($cacheId, $capabilities);
63 return $capabilities;
64 }
65 /** @var Capability[] */
66 return $cache->fetch($cacheId);
67 }
68 /**
69 * @throws Exception
70 */
71 public function getCapability(string $capabilityId) : ?\Piwik\Access\Capability
72 {
73 foreach ($this->getAllCapabilities() as $capability) {
74 if ($capabilityId === $capability->getId()) {
75 return $capability;
76 }
77 }
78 return null;
79 }
80 /**
81 * @return string[]
82 * @throws Exception
83 */
84 public function getAllCapabilityIds() : array
85 {
86 $ids = array();
87 foreach ($this->getAllCapabilities() as $capability) {
88 $ids[] = $capability->getId();
89 }
90 return $ids;
91 }
92 /**
93 * @throws Exception
94 */
95 public function isValidCapability(string $capabilityId) : bool
96 {
97 $capabilities = $this->getAllCapabilityIds();
98 return \in_array($capabilityId, $capabilities, \true);
99 }
100 /**
101 * @throws Exception
102 */
103 public function checkValidCapability(string $capabilityId) : void
104 {
105 if (!$this->isValidCapability($capabilityId)) {
106 $capabilities = $this->getAllCapabilityIds();
107 throw new \Exception(Piwik::translate("UsersManager_ExceptionAccessValues", implode(", ", $capabilities)));
108 }
109 }
110 /**
111 * @param Capability[] $capabilities
112 * @throws Exception
113 */
114 private function checkCapabilityIds(array $capabilities) : void
115 {
116 foreach ($capabilities as $capability) {
117 $id = $capability->getId();
118 if (preg_match('/[^a-zA-Z0-9_-]/', $id)) {
119 throw new \Exception("Capability with invalid ID found: '{$id}'. Valid characters are 'a-zA-Z0-9_-'.");
120 }
121 }
122 }
123 }
124