|
7 | 7 |
|
8 | 8 | interface ParsedPermitStatement { |
9 | 9 | action: string | null; |
10 | | - actions: string[] | null; |
11 | 10 | resourceType: string | null; |
12 | 11 | resourceId: string | null; |
13 | 12 | isWildcard: boolean; |
@@ -56,41 +55,21 @@ export function parseCedarPolicyToClassicalPermissions( |
56 | 55 | case 'group:edit': |
57 | 56 | result.group.accessLevel = AccessLevelEnum.edit; |
58 | 57 | break; |
59 | | - case 'table:*': { |
60 | | - const wildcardTableName = permit.resourceId ? extractTableName(permit.resourceId, connectionId) : '*'; |
61 | | - if (!wildcardTableName) break; |
62 | | - const wildcardTableEntry = getOrCreateTableEntry(tableMap, wildcardTableName); |
63 | | - applyTableAction(wildcardTableEntry, 'table:read'); |
64 | | - applyTableAction(wildcardTableEntry, 'table:add'); |
65 | | - applyTableAction(wildcardTableEntry, 'table:edit'); |
66 | | - applyTableAction(wildcardTableEntry, 'table:delete'); |
67 | | - break; |
68 | | - } |
69 | 58 | case 'table:read': |
70 | 59 | case 'table:add': |
71 | 60 | case 'table:edit': |
72 | 61 | case 'table:delete': { |
73 | | - const tableName = permit.resourceId ? extractTableName(permit.resourceId, connectionId) : '*'; |
| 62 | + const tableName = extractTableName(permit.resourceId, connectionId); |
74 | 63 | if (!tableName) break; |
75 | 64 | const tableEntry = getOrCreateTableEntry(tableMap, tableName); |
76 | 65 | applyTableAction(tableEntry, permit.action); |
77 | 66 | break; |
78 | 67 | } |
79 | | - case 'dashboard:*': { |
80 | | - const wildcardDashboardId = permit.resourceId ? extractDashboardId(permit.resourceId, connectionId) : '*'; |
81 | | - if (!wildcardDashboardId) break; |
82 | | - const wildcardDashboardEntry = getOrCreateDashboardEntry(dashboardMap, wildcardDashboardId); |
83 | | - applyDashboardAction(wildcardDashboardEntry, 'dashboard:read'); |
84 | | - applyDashboardAction(wildcardDashboardEntry, 'dashboard:create'); |
85 | | - applyDashboardAction(wildcardDashboardEntry, 'dashboard:edit'); |
86 | | - applyDashboardAction(wildcardDashboardEntry, 'dashboard:delete'); |
87 | | - break; |
88 | | - } |
89 | 68 | case 'dashboard:read': |
90 | 69 | case 'dashboard:create': |
91 | 70 | case 'dashboard:edit': |
92 | 71 | case 'dashboard:delete': { |
93 | | - const dashboardId = permit.resourceId ? extractDashboardId(permit.resourceId, connectionId) : '*'; |
| 72 | + const dashboardId = extractDashboardId(permit.resourceId, connectionId); |
94 | 73 | if (!dashboardId) break; |
95 | 74 | const dashboardEntry = getOrCreateDashboardEntry(dashboardMap, dashboardId); |
96 | 75 | applyDashboardAction(dashboardEntry, permit.action); |
@@ -161,39 +140,28 @@ function extractPermitStatements(policyText: string): ParsedPermitStatement[] { |
161 | 140 | } |
162 | 141 | } |
163 | 142 |
|
164 | | - return results.flatMap(expandActionIn); |
165 | | -} |
166 | | - |
167 | | -function expandActionIn(stmt: ParsedPermitStatement): ParsedPermitStatement[] { |
168 | | - if (!stmt.actions || stmt.actions.length === 0) return [stmt]; |
169 | | - return stmt.actions.map((action) => ({ ...stmt, action, actions: null })); |
| 143 | + return results; |
170 | 144 | } |
171 | 145 |
|
172 | 146 | function parsePermitBody(body: string): ParsedPermitStatement { |
173 | 147 | const result: ParsedPermitStatement = { |
174 | 148 | action: null, |
175 | | - actions: null, |
176 | 149 | resourceType: null, |
177 | 150 | resourceId: null, |
178 | 151 | isWildcard: false, |
179 | 152 | }; |
180 | 153 |
|
181 | | - const actionMatch = body.match(/action\s*(?:==|like)\s*RocketAdmin::Action::"([^"]+)"/); |
| 154 | + const actionMatch = body.match(/action\s*==\s*RocketAdmin::Action::"([^"]+)"/); |
182 | 155 | if (actionMatch) { |
183 | 156 | result.action = actionMatch[1]; |
184 | 157 | } else { |
185 | | - const actionInMatch = body.match(/action\s+in\s*\[([^\]]+)\]/); |
186 | | - if (actionInMatch) { |
187 | | - result.actions = [...actionInMatch[1].matchAll(/RocketAdmin::Action::"([^"]+)"/g)].map((m) => m[1]); |
188 | | - } else { |
189 | | - const actionClause = body.match(/,\s*(action)\s*,/); |
190 | | - if (actionClause) { |
191 | | - result.isWildcard = true; |
192 | | - } |
| 158 | + const actionClause = body.match(/,\s*(action)\s*,/); |
| 159 | + if (actionClause) { |
| 160 | + result.isWildcard = true; |
193 | 161 | } |
194 | 162 | } |
195 | 163 |
|
196 | | - const resourceMatch = body.match(/resource\s*(?:==|like)\s*(RocketAdmin::\w+)::"([^"]+)"/); |
| 164 | + const resourceMatch = body.match(/resource\s*==\s*(RocketAdmin::\w+)::"([^"]+)"/); |
197 | 165 | if (resourceMatch) { |
198 | 166 | result.resourceType = resourceMatch[1]; |
199 | 167 | result.resourceId = resourceMatch[2]; |
|
0 commit comments