Skip to content

Commit 9359bef

Browse files
authored
Merge pull request #1243 from appwrite/fix-add-permission-helper-class-node
fix: add permission and role helper class to node
2 parents 08f8394 + 2c17646 commit 9359bef

File tree

14 files changed

+295
-154
lines changed

14 files changed

+295
-154
lines changed

src/SDK/Language.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ abstract public function getKeywords(): array;
3232
*/
3333
abstract public function getIdentifierOverrides(): array;
3434

35+
/**
36+
* Get the static access operator for the language (e.g. '::' for PHP, '.' for JS)
37+
* @return string
38+
*/
39+
abstract public function getStaticAccessOperator(): string;
40+
41+
/**
42+
* Get the string quote character for the language (e.g. '"' for PHP, "'" for JS)
43+
* @return string
44+
*/
45+
abstract public function getStringQuote(): string;
46+
47+
/**
48+
* Wrap elements in an array syntax for the language
49+
* @param string $elements Comma-separated elements
50+
* @return string
51+
*/
52+
abstract public function getArrayOf(string $elements): string;
53+
3554
/**
3655
* @return array<array>
3756
*/
@@ -193,4 +212,68 @@ public function hasPermissionParam(array $parameters): bool
193212
}
194213
return false;
195214
}
215+
216+
/**
217+
* Get the prefix for Permission and Role classes (e.g., 'sdk.' for Node)
218+
* @return string
219+
*/
220+
protected function getPermissionPrefix(): string
221+
{
222+
return '';
223+
}
224+
225+
/**
226+
* Transform permission action name for language-specific casing
227+
* Override in child classes if needed (e.g., DotNet uses ucfirst)
228+
* @param string $action
229+
* @return string
230+
*/
231+
protected function transformPermissionAction(string $action): string
232+
{
233+
return $action;
234+
}
235+
236+
/**
237+
* Transform permission role name for language-specific casing
238+
* Override in child classes if needed (e.g., DotNet uses ucfirst)
239+
* @param string $role
240+
* @return string
241+
*/
242+
protected function transformPermissionRole(string $role): string
243+
{
244+
return $role;
245+
}
246+
247+
/**
248+
* Generate permission example code for the language
249+
* @param string $example Permission string example
250+
* @return string
251+
*/
252+
public function getPermissionExample(string $example): string
253+
{
254+
$permissions = [];
255+
$staticOp = $this->getStaticAccessOperator();
256+
$quote = $this->getStringQuote();
257+
$prefix = $this->getPermissionPrefix();
258+
259+
foreach ($this->extractPermissionParts($example) as $permission) {
260+
$args = [];
261+
if ($permission['id'] !== null) {
262+
$args[] = $quote . $permission['id'] . $quote;
263+
}
264+
if ($permission['innerRole'] !== null) {
265+
$args[] = $quote . $permission['innerRole'] . $quote;
266+
}
267+
$argsString = implode(', ', $args);
268+
269+
$action = $permission['action'];
270+
$role = $permission['role'];
271+
$action = $this->transformPermissionAction($action);
272+
$role = $this->transformPermissionRole($role);
273+
274+
$permissions[] = $prefix . 'Permission' . $staticOp . $action . '(' . $prefix . 'Role' . $staticOp . $role . '(' . $argsString . '))';
275+
}
276+
277+
return $this->getArrayOf(implode(', ', $permissions));
278+
}
196279
}

src/SDK/Language/Dart.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,21 @@ public function getIdentifierOverrides(): array
121121
];
122122
}
123123

124+
public function getStaticAccessOperator(): string
125+
{
126+
return '.';
127+
}
128+
129+
public function getStringQuote(): string
130+
{
131+
return "'";
132+
}
133+
134+
public function getArrayOf(string $elements): string
135+
{
136+
return '[' . $elements . ']';
137+
}
138+
124139
/**
125140
* @param array $parameter
126141
* @return string
@@ -252,23 +267,6 @@ public function getParamExample(array $param): string
252267
};
253268
}
254269

255-
public function getPermissionExample(string $example): string
256-
{
257-
$permissions = [];
258-
foreach ($this->extractPermissionParts($example) as $permission) {
259-
$args = [];
260-
if ($permission['id'] !== null) {
261-
$args[] = "'" . $permission['id'] . "'";
262-
}
263-
if ($permission['innerRole'] !== null) {
264-
$args[] = "'" . $permission['innerRole'] . "'";
265-
}
266-
$argsString = implode(', ', $args);
267-
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
268-
}
269-
return '[' . implode(', ', $permissions) . ']';
270-
}
271-
272270
/**
273271
* @return array
274272
*/

src/SDK/Language/Deno.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@ public function getName(): string
1212
return 'Deno';
1313
}
1414

15+
public function getStaticAccessOperator(): string
16+
{
17+
return '.';
18+
}
19+
20+
public function getStringQuote(): string
21+
{
22+
return "'";
23+
}
24+
25+
public function getArrayOf(string $elements): string
26+
{
27+
return '[' . $elements . ']';
28+
}
29+
1530
/**
1631
* @return array
1732
*/
@@ -188,21 +203,4 @@ public function getParamExample(array $param): string
188203
self::TYPE_STRING => "'{$example}'",
189204
};
190205
}
191-
192-
public function getPermissionExample(string $example): string
193-
{
194-
$permissions = [];
195-
foreach ($this->extractPermissionParts($example) as $permission) {
196-
$args = [];
197-
if ($permission['id'] !== null) {
198-
$args[] = "'" . $permission['id'] . "'";
199-
}
200-
if ($permission['innerRole'] !== null) {
201-
$args[] = "'" . $permission['innerRole'] . "'";
202-
}
203-
$argsString = implode(', ', $args);
204-
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
205-
}
206-
return '[' . implode(', ', $permissions) . ']';
207-
}
208206
}

src/SDK/Language/DotNet.php

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,31 @@ public function getIdentifierOverrides(): array
146146
];
147147
}
148148

149+
public function getStaticAccessOperator(): string
150+
{
151+
return '.';
152+
}
153+
154+
public function getStringQuote(): string
155+
{
156+
return '"';
157+
}
158+
159+
public function getArrayOf(string $elements): string
160+
{
161+
return 'new List<string> { ' . $elements . ' }';
162+
}
163+
164+
protected function transformPermissionAction(string $action): string
165+
{
166+
return ucfirst($action);
167+
}
168+
169+
protected function transformPermissionRole(string $role): string
170+
{
171+
return ucfirst($role);
172+
}
173+
149174
public function getPropertyOverrides(): array
150175
{
151176
return [
@@ -312,23 +337,6 @@ public function getParamExample(array $param): string
312337
return $output;
313338
}
314339

315-
public function getPermissionExample(string $example): string
316-
{
317-
$permissions = [];
318-
foreach ($this->extractPermissionParts($example) as $permission) {
319-
$args = [];
320-
if ($permission['id'] !== null) {
321-
$args[] = '"' . $permission['id'] . '"';
322-
}
323-
if ($permission['innerRole'] !== null) {
324-
$args[] = '"' . $permission['innerRole'] . '"';
325-
}
326-
$argsString = implode(', ', $args);
327-
$permissions[] = 'Permission.' . ucfirst($permission['action']) . '(Role.' . ucfirst($permission['role']) . '(' . $argsString . '))';
328-
}
329-
return 'new List<string> { ' . implode(', ', $permissions) . ' }';
330-
}
331-
332340
/**
333341
* @return array
334342
*/

src/SDK/Language/Go.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ public function getKeywords(): array
4444
];
4545
}
4646

47+
public function getStaticAccessOperator(): string
48+
{
49+
return '.';
50+
}
51+
52+
public function getStringQuote(): string
53+
{
54+
return '"';
55+
}
56+
57+
public function getArrayOf(string $elements): string
58+
{
59+
return '[' . $elements . ']';
60+
}
61+
4762
/**
4863
* @return array
4964
*/

src/SDK/Language/GraphQL.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@ public function getName(): string
1212
return 'GraphQL';
1313
}
1414

15+
public function getStaticAccessOperator(): string
16+
{
17+
return '.';
18+
}
19+
20+
public function getStringQuote(): string
21+
{
22+
return '"';
23+
}
24+
25+
public function getArrayOf(string $elements): string
26+
{
27+
return '[' . $elements . ']';
28+
}
29+
1530
/**
1631
* @param $type
1732
* @return string

src/SDK/Language/Kotlin.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,21 @@ public function getIdentifierOverrides(): array
9999
return [];
100100
}
101101

102+
public function getStaticAccessOperator(): string
103+
{
104+
return '.';
105+
}
106+
107+
public function getStringQuote(): string
108+
{
109+
return '"';
110+
}
111+
112+
public function getArrayOf(string $elements): string
113+
{
114+
return 'listOf(' . $elements . ')';
115+
}
116+
102117
/**
103118
* @param array $parameter
104119
* @param array $spec
@@ -281,23 +296,6 @@ public function getParamExample(array $param): string
281296
return $output;
282297
}
283298

284-
public function getPermissionExample(string $example): string
285-
{
286-
$permissions = [];
287-
foreach ($this->extractPermissionParts($example) as $permission) {
288-
$args = [];
289-
if ($permission['id'] !== null) {
290-
$args[] = '"' . $permission['id'] . '"';
291-
}
292-
if ($permission['innerRole'] !== null) {
293-
$args[] = '"' . $permission['innerRole'] . '"';
294-
}
295-
$argsString = implode(', ', $args);
296-
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
297-
}
298-
return 'listOf(' . implode(', ', $permissions) . ')';
299-
}
300-
301299
/**
302300
* @return array
303301
*/

src/SDK/Language/Node.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,26 @@ public function getName(): string
1212
return 'NodeJS';
1313
}
1414

15+
public function getStaticAccessOperator(): string
16+
{
17+
return '.';
18+
}
19+
20+
public function getStringQuote(): string
21+
{
22+
return "'";
23+
}
24+
25+
public function getArrayOf(string $elements): string
26+
{
27+
return '[' . $elements . ']';
28+
}
29+
30+
protected function getPermissionPrefix(): string
31+
{
32+
return 'sdk.';
33+
}
34+
1535
public function getTypeName(array $parameter, array $method = []): string
1636
{
1737
if (isset($parameter['enumName'])) {
@@ -140,7 +160,8 @@ public function getParamExample(array $param): string
140160
}
141161

142162
return match ($type) {
143-
self::TYPE_ARRAY, self::TYPE_FILE, self::TYPE_INTEGER, self::TYPE_NUMBER => $example,
163+
self::TYPE_ARRAY => $this->isPermissionString($example) ? $this->getPermissionExample($example) : $example,
164+
self::TYPE_FILE, self::TYPE_INTEGER, self::TYPE_NUMBER => $example,
144165
self::TYPE_BOOLEAN => ($example) ? 'true' : 'false',
145166
self::TYPE_OBJECT => ($example === '{}')
146167
? '{}'

0 commit comments

Comments
 (0)