Skip to content

Commit a531603

Browse files
committed
feat: add canReadAllProjectEvents and canManageDevBranches token flags
Implement two new boolean permission flags for non-admin Storage API tokens: - canReadAllProjectEvents: grants read-only access to all project events (not just own-token events), without requiring admin token - canManageDevBranches: grants ability to create/delete dev branches without requiring admin token (blocked in SOX projects) Both flags are: - Set at creation time only (not updatable) - Mutually exclusive with canCreateJobs and canManageProtectedDefaultBranch - Backward compatible (default false, DB migration with DEFAULT 0) Security: canManageDevBranches is blocked in SOX/protected-branch projects at the CreateTokenVoter level. Main branch deletion is protected in CanDeleteDevBranch voter. Includes DB migration, unit tests, E2E tests, and PHP client support.
1 parent 4a99008 commit a531603

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

src/Keboola/StorageApi/Options/TokenCreateOptions.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ class TokenCreateOptions extends TokenAbstractOptions
1414

1515
private bool $canCreateJobs = false;
1616

17+
private bool $canReadAllProjectEvents = false;
18+
19+
private bool $canManageDevBranches = false;
20+
1721
/**
1822
* @return int|null
1923
*/
@@ -72,6 +76,28 @@ public function canCreateJobs(): bool
7276
return $this->canCreateJobs;
7377
}
7478

79+
public function setCanReadAllProjectEvents(bool $canReadAllProjectEvents = true): self
80+
{
81+
$this->canReadAllProjectEvents = $canReadAllProjectEvents;
82+
return $this;
83+
}
84+
85+
public function canReadAllProjectEvents(): bool
86+
{
87+
return $this->canReadAllProjectEvents;
88+
}
89+
90+
public function setCanManageDevBranches(bool $canManageDevBranches = true): self
91+
{
92+
$this->canManageDevBranches = $canManageDevBranches;
93+
return $this;
94+
}
95+
96+
public function canManageDevBranches(): bool
97+
{
98+
return $this->canManageDevBranches;
99+
}
100+
75101
/**
76102
* @param bool $forJson return structure for form-data (false) or for JSON (true)
77103
*/
@@ -95,6 +121,14 @@ public function toParamsArray(bool $forJson = false): array
95121
$params['canCreateJobs'] = $this->canCreateJobs();
96122
}
97123

124+
if ($this->canReadAllProjectEvents()) {
125+
$params['canReadAllProjectEvents'] = $this->canReadAllProjectEvents();
126+
}
127+
128+
if ($this->canManageDevBranches()) {
129+
$params['canManageDevBranches'] = $this->canManageDevBranches();
130+
}
131+
98132
return $params;
99133
}
100134
}

0 commit comments

Comments
 (0)