@atlashub/smartstack-cli 3.36.0 → 3.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -24
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +201 -256
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +3 -2
- package/scripts/extract-api-endpoints.ts +325 -0
- package/scripts/extract-business-rules.ts +440 -0
- package/scripts/generate-doc-with-mock-ui.ts +804 -0
- package/scripts/health-check.sh +168 -0
- package/scripts/postinstall.js +18 -0
- package/templates/agents/ba-reader.md +9 -9
- package/templates/agents/ba-writer.md +12 -15
- package/templates/agents/code-reviewer.md +1 -1
- package/templates/agents/docs-context-reader.md +1 -1
- package/templates/agents/gitflow/merge.md +0 -4
- package/templates/agents/gitflow/pr.md +0 -4
- package/templates/agents/gitflow/start.md +30 -5
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +20 -20
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +16 -24
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +2 -2
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +3 -3
- package/templates/skills/_shared.md +15 -17
- package/templates/skills/ai-prompt/SKILL.md +1 -1
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -0
- package/templates/skills/apex/SKILL.md +3 -4
- package/templates/skills/apex/_shared.md +10 -20
- package/templates/skills/apex/references/analysis-methods.md +141 -0
- package/templates/skills/apex/references/challenge-questions.md +1 -21
- package/templates/skills/apex/references/core-seed-data.md +35 -57
- package/templates/skills/apex/references/examine-build-validation.md +87 -0
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -0
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -0
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -0
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -0
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -0
- package/templates/skills/apex/references/post-checks.md +145 -40
- package/templates/skills/apex/references/smartstack-api.md +35 -51
- package/templates/skills/apex/references/smartstack-frontend.md +17 -17
- package/templates/skills/apex/references/smartstack-layers.md +38 -62
- package/templates/skills/apex/steps/step-00-init.md +14 -26
- package/templates/skills/apex/steps/step-01-analyze.md +10 -143
- package/templates/skills/apex/steps/step-02-plan.md +10 -92
- package/templates/skills/apex/steps/step-03-execute.md +47 -249
- package/templates/skills/apex/steps/step-04-examine.md +14 -78
- package/templates/skills/apex/steps/step-05-deep-review.md +2 -2
- package/templates/skills/apex/steps/step-08-run-tests.md +2 -0
- package/templates/skills/application/SKILL.md +6 -7
- package/templates/skills/application/references/backend-controller-hierarchy.md +16 -16
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -0
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -0
- package/templates/skills/application/references/backend-verification.md +1 -1
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -0
- package/templates/skills/application/references/frontend-route-naming.md +117 -0
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -0
- package/templates/skills/application/references/frontend-verification.md +12 -12
- package/templates/skills/application/references/init-parameter-detection.md +120 -0
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +100 -0
- package/templates/skills/application/references/nav-fallback-procedure.md +5 -6
- package/templates/skills/application/references/provider-template.md +2 -6
- package/templates/skills/application/references/roles-client-project-handling.md +55 -0
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -0
- package/templates/skills/application/references/test-coverage-requirements.md +213 -0
- package/templates/skills/application/references/test-frontend.md +3 -3
- package/templates/skills/application/steps/step-00-init.md +11 -141
- package/templates/skills/application/steps/step-01-navigation.md +3 -3
- package/templates/skills/application/steps/step-02-permissions.md +4 -4
- package/templates/skills/application/steps/step-03-roles.md +18 -175
- package/templates/skills/application/steps/step-03b-provider.md +1 -2
- package/templates/skills/application/steps/step-04-backend.md +19 -110
- package/templates/skills/application/steps/step-05-frontend.md +17 -143
- package/templates/skills/application/steps/step-06-migration.md +12 -60
- package/templates/skills/application/steps/step-07-tests.md +9 -76
- package/templates/skills/application/templates-backend.md +29 -27
- package/templates/skills/application/templates-frontend.md +48 -48
- package/templates/skills/application/templates-seed.md +57 -131
- package/templates/skills/business-analyse/SKILL.md +27 -30
- package/templates/skills/business-analyse/_architecture.md +6 -6
- package/templates/skills/business-analyse/_shared.md +60 -88
- package/templates/skills/business-analyse/questionnaire/04-data.md +3 -3
- package/templates/skills/business-analyse/questionnaire/06-security.md +1 -1
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +1 -1
- package/templates/skills/business-analyse/react/application-viewer.md +12 -12
- package/templates/skills/business-analyse/react/components.md +8 -12
- package/templates/skills/business-analyse/react/schema.md +11 -11
- package/templates/skills/business-analyse/references/agent-module-prompt.md +2 -3
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -0
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +2 -2
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -0
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -0
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +69 -0
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -0
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +2 -2
- package/templates/skills/business-analyse/references/deploy-modes.md +5 -5
- package/templates/skills/business-analyse/references/detection-strategies.md +7 -7
- package/templates/skills/business-analyse/references/handoff-file-templates.md +14 -22
- package/templates/skills/business-analyse/references/handoff-mappings.md +4 -4
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -0
- package/templates/skills/business-analyse/references/init-schema-deployment.md +3 -3
- package/templates/skills/business-analyse/references/naming-conventions.md +22 -24
- package/templates/skills/business-analyse/references/prd-generation.md +2 -2
- package/templates/skills/business-analyse/references/review-data-mapping.md +2 -2
- package/templates/skills/business-analyse/references/robustness-checks.md +1 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +3 -3
- package/templates/skills/business-analyse/references/team-orchestration.md +49 -6
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +18 -18
- package/templates/skills/business-analyse/references/validate-incremental-html.md +2 -2
- package/templates/skills/business-analyse/references/validation-checklist.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +4 -5
- package/templates/skills/business-analyse/schemas/project-schema.json +1 -6
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +2 -3
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +8 -17
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +35 -198
- package/templates/skills/business-analyse/steps/step-01b-applications.md +16 -20
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +1 -1
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +4 -4
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +1 -1
- package/templates/skills/business-analyse/steps/step-03b-ui.md +4 -4
- package/templates/skills/business-analyse/steps/step-03c-compile.md +66 -140
- package/templates/skills/business-analyse/steps/step-03d-validate.md +2 -2
- package/templates/skills/business-analyse/steps/step-04a-collect.md +2 -2
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +42 -160
- package/templates/skills/business-analyse/steps/step-04c-decide.md +1 -1
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +74 -104
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +13 -11
- package/templates/skills/business-analyse/steps/step-06-review.md +3 -3
- package/templates/skills/business-analyse/templates/tpl-frd.md +13 -13
- package/templates/skills/business-analyse/templates/tpl-handoff.md +12 -12
- package/templates/skills/business-analyse/templates-frd.md +25 -25
- package/templates/skills/business-analyse/templates-react.md +15 -21
- package/templates/skills/controller/SKILL.md +1 -1
- package/templates/skills/controller/postman-templates.md +1 -1
- package/templates/skills/controller/references/controller-code-templates.md +2 -2
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -0
- package/templates/skills/controller/references/permission-sync-templates.md +13 -16
- package/templates/skills/controller/steps/step-00-init.md +11 -11
- package/templates/skills/controller/steps/step-03-generate.md +64 -103
- package/templates/skills/controller/templates.md +67 -71
- package/templates/skills/debug/SKILL.md +13 -218
- package/templates/skills/debug/steps/step-00-init.md +57 -0
- package/templates/skills/debug/steps/step-01-analyze.md +219 -0
- package/templates/skills/debug/steps/step-02-resolve.md +85 -0
- package/templates/skills/documentation/SKILL.md +49 -345
- package/templates/skills/documentation/data-schema.md +11 -8
- package/templates/skills/documentation/steps/step-00-init.md +70 -0
- package/templates/skills/documentation/steps/step-01-scan.md +113 -0
- package/templates/skills/documentation/steps/step-02-generate.md +231 -0
- package/templates/skills/documentation/steps/step-03-validate.md +238 -0
- package/templates/skills/documentation/templates.md +480 -322
- package/templates/skills/efcore/references/both-contexts.md +32 -0
- package/templates/skills/efcore/references/database-operations.md +67 -0
- package/templates/skills/efcore/references/destructive-operations.md +38 -0
- package/templates/skills/efcore/references/reset-operations.md +81 -0
- package/templates/skills/efcore/references/seed-methods.md +86 -0
- package/templates/skills/efcore/references/shared-init-functions.md +250 -0
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -0
- package/templates/skills/efcore/references/troubleshooting.md +81 -0
- package/templates/skills/efcore/steps/db/step-deploy.md +1 -32
- package/templates/skills/efcore/steps/db/step-reset.md +7 -103
- package/templates/skills/efcore/steps/db/step-seed.md +10 -132
- package/templates/skills/efcore/steps/db/step-status.md +5 -44
- package/templates/skills/efcore/steps/migration/step-03-validate.md +8 -62
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +1 -57
- package/templates/skills/efcore/steps/shared/step-00-init.md +11 -254
- package/templates/skills/efcore/steps/squash/step-03-create.md +1 -58
- package/templates/skills/feature-full/SKILL.md +1 -1
- package/templates/skills/feature-full/steps/step-00-init.md +57 -0
- package/templates/skills/feature-full/steps/step-01-implementation.md +1 -1
- package/templates/skills/gitflow/SKILL.md +1 -1
- package/templates/skills/gitflow/_shared.md +23 -0
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -0
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -0
- package/templates/skills/gitflow/references/finish-cleanup.md +51 -0
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -0
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -0
- package/templates/skills/gitflow/references/init-questions.md +185 -0
- package/templates/skills/gitflow/references/init-structure-creation.md +71 -0
- package/templates/skills/gitflow/references/init-version-detection.md +21 -0
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -0
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -0
- package/templates/skills/gitflow/references/merge-execution.md +62 -0
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -0
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -0
- package/templates/skills/gitflow/references/pr-generation.md +58 -0
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -0
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -0
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -0
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -0
- package/templates/skills/gitflow/steps/step-commit.md +12 -91
- package/templates/skills/gitflow/steps/step-finish.md +15 -159
- package/templates/skills/gitflow/steps/step-init.md +24 -326
- package/templates/skills/gitflow/steps/step-merge.md +17 -176
- package/templates/skills/gitflow/steps/step-pr.md +10 -116
- package/templates/skills/gitflow/steps/step-start.md +16 -109
- package/templates/skills/gitflow/steps/step-sync.md +6 -69
- package/templates/skills/ralph-loop/SKILL.md +6 -0
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +1 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -0
- package/templates/skills/ralph-loop/references/module-transition.md +151 -0
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -0
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -0
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +6 -9
- package/templates/skills/ralph-loop/references/team-orchestration.md +45 -3
- package/templates/skills/ralph-loop/steps/step-00-init.md +36 -109
- package/templates/skills/ralph-loop/steps/step-01-task.md +15 -163
- package/templates/skills/ralph-loop/steps/step-02-execute.md +8 -154
- package/templates/skills/ralph-loop/steps/step-04-check.md +21 -73
- package/templates/skills/review-code/references/owasp-api-top10.md +5 -5
- package/templates/skills/review-code/references/smartstack-conventions.md +11 -11
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -0
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -0
- package/templates/skills/validate-feature/steps/step-01-compile.md +5 -2
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +34 -145
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +74 -260
- package/templates/skills/workflow/SKILL.md +1 -1
- package/templates/skills/workflow/steps/step-00-init.md +57 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Templates Specification - Business Analysis
|
|
2
2
|
|
|
3
3
|
> **Usage:** Templates for functional specification documents
|
|
4
|
-
> **Context:**
|
|
4
|
+
> **Context:** Application > Module > Section
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
> **Module:** business/{application}/{module}
|
|
180
180
|
> **Version:** 1.0
|
|
181
181
|
> **Based on:** 2-brd.md v1.0
|
|
182
|
-
> **Permission path:**
|
|
182
|
+
> **Permission path:** {application}.{module}.*
|
|
183
183
|
|
|
184
184
|
## 1. Overview
|
|
185
185
|
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
|
|
191
191
|
| Actor | Description | Required Permissions |
|
|
192
192
|
|--------|-------------|---------------------|
|
|
193
|
-
| {Role} | {description} | `
|
|
193
|
+
| {Role} | {description} | `{app}.{module}.{action}` |
|
|
194
194
|
|
|
195
195
|
## 2. Use Cases
|
|
196
196
|
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
| **Primary Actor** | {Role} |
|
|
204
204
|
| **Preconditions** | {required conditions} |
|
|
205
205
|
| **Postconditions** | {final state} |
|
|
206
|
-
| **Permission** | `
|
|
206
|
+
| **Permission** | `{app}.{module}.{action}` |
|
|
207
207
|
|
|
208
208
|
**Main Scenario:**
|
|
209
209
|
1. The user {action}
|
|
@@ -297,19 +297,19 @@
|
|
|
297
297
|
|
|
298
298
|
| Permission | Admin | Manager | User | ReadOnly |
|
|
299
299
|
|------------|-------|---------|------|----------|
|
|
300
|
-
| `
|
|
301
|
-
| `
|
|
302
|
-
| `
|
|
303
|
-
| `
|
|
300
|
+
| `{app}.{module}.read` | ✅ | ✅ | ✅ | ✅ |
|
|
301
|
+
| `{app}.{module}.create` | ✅ | ✅ | ❌ | ❌ |
|
|
302
|
+
| `{app}.{module}.update` | ✅ | ✅ | ❌ | ❌ |
|
|
303
|
+
| `{app}.{module}.delete` | ✅ | ❌ | ❌ | ❌ |
|
|
304
304
|
|
|
305
305
|
### 6.2 Endpoint-Permission Mapping
|
|
306
306
|
|
|
307
307
|
| Endpoint | Method | Required Permission |
|
|
308
308
|
|----------|--------|-------------------|
|
|
309
|
-
| `/api/
|
|
310
|
-
| `/api/
|
|
311
|
-
| `/api/
|
|
312
|
-
| `/api/
|
|
309
|
+
| `/api/{module}` | GET | `{module}.read` |
|
|
310
|
+
| `/api/{module}` | POST | `{module}.create` |
|
|
311
|
+
| `/api/{module}/{id}` | PUT | `{module}.update` |
|
|
312
|
+
| `/api/{module}/{id}` | DELETE | `{module}.delete` |
|
|
313
313
|
|
|
314
314
|
## 7. Gherkin Scenarios
|
|
315
315
|
|
|
@@ -319,15 +319,15 @@ Feature: {FEAT-XXX} {Feature Name}
|
|
|
319
319
|
@permission @403
|
|
320
320
|
Scenario: User without permission cannot create
|
|
321
321
|
Given I am logged in as "user@test.com" with role "ReadOnly"
|
|
322
|
-
When I send POST to "/api/
|
|
322
|
+
When I send POST to "/api/{module}"
|
|
323
323
|
Then the response status should be 403
|
|
324
324
|
And the response should contain "Permission denied"
|
|
325
325
|
|
|
326
326
|
@happy-path
|
|
327
327
|
Scenario: Admin creates new item
|
|
328
328
|
Given I am logged in as "admin@test.com" with role "Admin"
|
|
329
|
-
And I have permission "
|
|
330
|
-
When I send POST to "/api/
|
|
329
|
+
And I have permission "{app}.{module}.create"
|
|
330
|
+
When I send POST to "/api/{module}" with:
|
|
331
331
|
| field1 | value1 |
|
|
332
332
|
| field2 | value2 |
|
|
333
333
|
Then the response status should be 201
|
|
@@ -373,8 +373,8 @@ This document is a self-contained prompt for Claude Code.
|
|
|
373
373
|
| Attribute | Value |
|
|
374
374
|
|----------|--------|
|
|
375
375
|
| Feature ID | FEAT-XXX |
|
|
376
|
-
| Module |
|
|
377
|
-
| Base Permission | `
|
|
376
|
+
| Module | {application}/{module} |
|
|
377
|
+
| Base Permission | `{app}.{module}` |
|
|
378
378
|
| Complexity | {Simple/Medium/Complex} |
|
|
379
379
|
|
|
380
380
|
## 2. [EXPLORE] EXISTING PATTERNS
|
|
@@ -388,7 +388,7 @@ BACKEND:
|
|
|
388
388
|
- src/SmartStack.Infrastructure/Persistence/Configurations/ → EF Core
|
|
389
389
|
|
|
390
390
|
FRONTEND:
|
|
391
|
-
- web/smartstack-web/src/pages/
|
|
391
|
+
- web/smartstack-web/src/pages/ → Existing pages
|
|
392
392
|
- web/smartstack-web/src/components/ → Reusable components
|
|
393
393
|
- web/smartstack-web/src/services/api/ → API calls
|
|
394
394
|
```
|
|
@@ -402,13 +402,13 @@ FRONTEND:
|
|
|
402
402
|
| `Domain/Entities/{Entity}.cs` | Domain Entity | Properties + business rules |
|
|
403
403
|
| `Application/Features/{Module}/` | CQRS Commands/Queries | MediatR handlers |
|
|
404
404
|
| `Infrastructure/.../Configurations/` | EF Core Config | Config + HasData |
|
|
405
|
-
| `Api/Controllers
|
|
405
|
+
| `Api/Controllers/` | API Controller | REST endpoints |
|
|
406
406
|
|
|
407
407
|
### 3.2 Frontend
|
|
408
408
|
|
|
409
409
|
| File | Template | Description |
|
|
410
410
|
|------|----------|-------------|
|
|
411
|
-
| `pages/
|
|
411
|
+
| `pages/{app}/{module}/` | React Page | List + detail |
|
|
412
412
|
| `services/api/{module}Api.ts` | API Service | Axios calls |
|
|
413
413
|
| `i18n/locales/{lang}/{module}.json` | Translations | FR, EN, IT, DE |
|
|
414
414
|
|
|
@@ -425,11 +425,11 @@ FRONTEND:
|
|
|
425
425
|
|
|
426
426
|
| Endpoint | Method | Permission | Body | Response |
|
|
427
427
|
|----------|--------|------------|------|----------|
|
|
428
|
-
| `/api/
|
|
429
|
-
| `/api/
|
|
430
|
-
| `/api/
|
|
431
|
-
| `/api/
|
|
432
|
-
| `/api/
|
|
428
|
+
| `/api/{module}` | GET | `.read` | - | Paginated list |
|
|
429
|
+
| `/api/{module}` | POST | `.create` | CreateDto | 201 + entity |
|
|
430
|
+
| `/api/{module}/{id}` | GET | `.read` | - | Entity |
|
|
431
|
+
| `/api/{module}/{id}` | PUT | `.update` | UpdateDto | 200 + entity |
|
|
432
|
+
| `/api/{module}/{id}` | DELETE | `.delete` | - | 204 |
|
|
433
433
|
|
|
434
434
|
### 4.3 Business Rules to Implement
|
|
435
435
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Templates React - Documentation Module
|
|
2
2
|
|
|
3
3
|
> **Usage:** Templates for generating HTML (React) documentation of module specifications
|
|
4
|
-
> **Output:** `web/smartstack-web/src/pages/docs/
|
|
4
|
+
> **Output:** `web/smartstack-web/src/pages/docs/{app}/{module}/`
|
|
5
5
|
> **Context7:** Use for up-to-date React code generation
|
|
6
6
|
|
|
7
7
|
---
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
## Template DocPage.tsx
|
|
34
34
|
|
|
35
35
|
```tsx
|
|
36
|
-
// web/smartstack-web/src/pages/docs/
|
|
36
|
+
// web/smartstack-web/src/pages/docs/{app}/{module}/DocPage.tsx
|
|
37
37
|
// GENERATE WITH: use context7 with /facebook/react
|
|
38
38
|
|
|
39
39
|
import { Link } from 'react-router-dom';
|
|
@@ -94,7 +94,7 @@ const docData: DocData = {
|
|
|
94
94
|
id: 'UC-001',
|
|
95
95
|
name: '{Use Case Name}',
|
|
96
96
|
actor: '{Actor}',
|
|
97
|
-
permission: '
|
|
97
|
+
permission: '{app}.{module}.{action}',
|
|
98
98
|
description: '{Description}'
|
|
99
99
|
}
|
|
100
100
|
],
|
|
@@ -108,12 +108,12 @@ const docData: DocData = {
|
|
|
108
108
|
],
|
|
109
109
|
permissions: [
|
|
110
110
|
{
|
|
111
|
-
path: '
|
|
111
|
+
path: '{app}.{module}.read',
|
|
112
112
|
description: 'View {module} data',
|
|
113
113
|
roles: ['Admin', 'Manager', 'User', 'ReadOnly']
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
|
-
path: '
|
|
116
|
+
path: '{app}.{module}.create',
|
|
117
117
|
description: 'Create new {module}',
|
|
118
118
|
roles: ['Admin', 'Manager']
|
|
119
119
|
}
|
|
@@ -163,7 +163,7 @@ function NumberedSection({
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
export function {ModuleName}DocPage() {
|
|
166
|
-
const { t } = useTranslation('docs
|
|
166
|
+
const { t } = useTranslation('docs');
|
|
167
167
|
|
|
168
168
|
return (
|
|
169
169
|
<div className="space-y-8">
|
|
@@ -173,11 +173,7 @@ export function {ModuleName}DocPage() {
|
|
|
173
173
|
{t('breadcrumb.docs')}
|
|
174
174
|
</Link>
|
|
175
175
|
<span>/</span>
|
|
176
|
-
<Link to=
|
|
177
|
-
{t('breadcrumb.business')}
|
|
178
|
-
</Link>
|
|
179
|
-
<span>/</span>
|
|
180
|
-
<Link to={`/docs/business/${docData.applicationName.toLowerCase()}`} className="hover:text-[var(--color-primary-600)]">
|
|
176
|
+
<Link to={`/docs/${docData.applicationName.toLowerCase()}`} className="hover:text-[var(--color-primary-600)]">
|
|
181
177
|
{t(`apps.${docData.applicationName.toLowerCase()}.name`)}
|
|
182
178
|
</Link>
|
|
183
179
|
<span>/</span>
|
|
@@ -372,22 +368,22 @@ export function {ModuleName}DocPage() {
|
|
|
372
368
|
<tbody>
|
|
373
369
|
<tr>
|
|
374
370
|
<td className="py-2 px-3"><span className="px-2 py-0.5 rounded bg-green-500/10 text-green-600">GET</span></td>
|
|
375
|
-
<td className="py-2 px-3">/api/
|
|
371
|
+
<td className="py-2 px-3">/api/{'{module}'}</td>
|
|
376
372
|
<td className="py-2 px-3 text-[var(--text-secondary)]">.read</td>
|
|
377
373
|
</tr>
|
|
378
374
|
<tr className="bg-[var(--bg-secondary)]/50">
|
|
379
375
|
<td className="py-2 px-3"><span className="px-2 py-0.5 rounded bg-blue-500/10 text-blue-600">POST</span></td>
|
|
380
|
-
<td className="py-2 px-3">/api/
|
|
376
|
+
<td className="py-2 px-3">/api/{'{module}'}</td>
|
|
381
377
|
<td className="py-2 px-3 text-[var(--text-secondary)]">.create</td>
|
|
382
378
|
</tr>
|
|
383
379
|
<tr>
|
|
384
380
|
<td className="py-2 px-3"><span className="px-2 py-0.5 rounded bg-yellow-500/10 text-yellow-600">PUT</span></td>
|
|
385
|
-
<td className="py-2 px-3">/api/
|
|
381
|
+
<td className="py-2 px-3">/api/{'{module}'}/{'{id}'}</td>
|
|
386
382
|
<td className="py-2 px-3 text-[var(--text-secondary)]">.update</td>
|
|
387
383
|
</tr>
|
|
388
384
|
<tr className="bg-[var(--bg-secondary)]/50">
|
|
389
385
|
<td className="py-2 px-3"><span className="px-2 py-0.5 rounded bg-red-500/10 text-red-600">DELETE</span></td>
|
|
390
|
-
<td className="py-2 px-3">/api/
|
|
386
|
+
<td className="py-2 px-3">/api/{'{module}'}/{'{id}'}</td>
|
|
391
387
|
<td className="py-2 px-3 text-[var(--text-secondary)]">.delete</td>
|
|
392
388
|
</tr>
|
|
393
389
|
</tbody>
|
|
@@ -398,14 +394,14 @@ export function {ModuleName}DocPage() {
|
|
|
398
394
|
{/* Navigation Footer */}
|
|
399
395
|
<div className="flex justify-between pt-6 border-t border-[var(--border-color)]">
|
|
400
396
|
<Link
|
|
401
|
-
to={`/docs
|
|
397
|
+
to={`/docs/${docData.applicationName.toLowerCase()}`}
|
|
402
398
|
className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary-600)]"
|
|
403
399
|
>
|
|
404
400
|
<ArrowRight className="w-4 h-4 rotate-180" />
|
|
405
401
|
{t('nav.backToApp')}
|
|
406
402
|
</Link>
|
|
407
403
|
<Link
|
|
408
|
-
to="/docs
|
|
404
|
+
to="/docs"
|
|
409
405
|
className="flex items-center gap-2 text-[var(--color-primary-600)]"
|
|
410
406
|
>
|
|
411
407
|
{t('nav.allModules')}
|
|
@@ -480,7 +476,7 @@ export function {ModuleName}DocPage() {
|
|
|
480
476
|
## Template Index Application
|
|
481
477
|
|
|
482
478
|
```tsx
|
|
483
|
-
// web/smartstack-web/src/pages/docs/
|
|
479
|
+
// web/smartstack-web/src/pages/docs/{app}/index.tsx
|
|
484
480
|
|
|
485
481
|
import { Link } from 'react-router-dom';
|
|
486
482
|
import { useTranslation } from 'react-i18next';
|
|
@@ -500,7 +496,7 @@ const modules: ModuleLink[] = [
|
|
|
500
496
|
name: '{Module Name}',
|
|
501
497
|
description: '{Module description}',
|
|
502
498
|
features: 3,
|
|
503
|
-
path: '/docs/
|
|
499
|
+
path: '/docs/{app}/{module}'
|
|
504
500
|
}
|
|
505
501
|
];
|
|
506
502
|
|
|
@@ -513,8 +509,6 @@ export function {App}DocsIndexPage() {
|
|
|
513
509
|
<nav className="flex items-center gap-2 text-sm text-[var(--text-secondary)]">
|
|
514
510
|
<Link to="/docs">{t('breadcrumb.docs')}</Link>
|
|
515
511
|
<span>/</span>
|
|
516
|
-
<Link to="/docs/business">{t('breadcrumb.business')}</Link>
|
|
517
|
-
<span>/</span>
|
|
518
512
|
<span>{t('apps.{app}.name')}</span>
|
|
519
513
|
</nav>
|
|
520
514
|
|
|
@@ -103,7 +103,7 @@ See `<parameters>` for complete flag list.
|
|
|
103
103
|
| `{module}` | string | Module name PascalCase (e.g., Users, Tickets) |
|
|
104
104
|
| `{entity}` | string | Entity name PascalCase (e.g., User, Ticket) |
|
|
105
105
|
| `{controller_type}` | string | crud, readonly, auth, custom |
|
|
106
|
-
| `{permission_path}` | string | Full permission path (e.g.,
|
|
106
|
+
| `{permission_path}` | string | Full permission path (e.g., support.tickets) |
|
|
107
107
|
| `{auto_mode}` | boolean | Skip confirmations |
|
|
108
108
|
| `{postman_mode}` | boolean | Generate Postman tests |
|
|
109
109
|
| `{dto_mode}` | boolean | Generate DTOs |
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
| User | Email | Password | Permissions |
|
|
29
29
|
|------|-------|----------|-------------|
|
|
30
30
|
| SuperAdmin | `superadmin@smartstack.test` | `SuperAdmin123!` | `*` (all) |
|
|
31
|
-
| PlatformAdmin | `platformadmin@smartstack.test` | `PlatformAdmin123!` | `
|
|
31
|
+
| PlatformAdmin | `platformadmin@smartstack.test` | `PlatformAdmin123!` | `administration.*` |
|
|
32
32
|
| User | `user@smartstack.test` | `User123!` | Standard |
|
|
33
33
|
| ReadOnly | `readonly@smartstack.test` | `ReadOnly123!` | `*.read` only |
|
|
34
34
|
| NoPerm | `noperm@smartstack.test` | `NoPerm123!` | None |
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
## Controller Template
|
|
8
8
|
|
|
9
|
-
**Target path:** `src/SmartStack.Api/Controllers/{
|
|
9
|
+
**Target path:** `src/SmartStack.Api/Controllers/{ApplicationPascal}/{entity}Controller.cs`
|
|
10
10
|
|
|
11
|
-
>
|
|
11
|
+
> Application mapping: `administration` → `Administration`, `support` → `Support`, `myspace` → `MySpace`
|
|
12
12
|
|
|
13
13
|
```csharp
|
|
14
14
|
using Microsoft.AspNetCore.Mvc;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# MCP Scaffold Workflow: DTOs + Controller
|
|
2
|
+
|
|
3
|
+
> **Reference for:** step-03-generate.md
|
|
4
|
+
> **Purpose:** Two-call MCP scaffold sequence with NavRoute integration
|
|
5
|
+
> **Calls:** `mcp__smartstack__scaffold_extension` for DTOs, then for Controller
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Two-Call Strategy
|
|
10
|
+
|
|
11
|
+
The skill uses TWO separate MCP calls (not one):
|
|
12
|
+
|
|
13
|
+
1. **First call:** Generate DTOs (Response, Create, Update)
|
|
14
|
+
2. **Second call:** Generate Controller with NavRoute attribute
|
|
15
|
+
|
|
16
|
+
**Why two calls?**
|
|
17
|
+
- The skill assumes Entity already exists (verified in step-01-analyze)
|
|
18
|
+
- Type "dto" generates DTOs without regenerating Entity
|
|
19
|
+
- Type "controller" generates Controller with NavRoute and DTO references
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Call 1: Generate DTOs
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
const dtoCall = await mcp__smartstack__scaffold_extension({
|
|
27
|
+
type: "dto",
|
|
28
|
+
name: "{entityName}", // PascalCase: "Product", "OrderItem"
|
|
29
|
+
options: {
|
|
30
|
+
navRoute: "{permission_path}", // For proper namespace hierarchy
|
|
31
|
+
schema: "core",
|
|
32
|
+
dryRun: false
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Expected output paths:
|
|
37
|
+
// - Application/{Application}/{Module}/DTOs/{entityName}ResponseDto.cs
|
|
38
|
+
// - Application/{Application}/{Module}/DTOs/Create{entityName}Dto.cs
|
|
39
|
+
// - Application/{Application}/{Module}/DTOs/Update{entityName}Dto.cs
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**From response, extract:**
|
|
43
|
+
- `dtoCall.dtoFiles.response` - Response DTO path
|
|
44
|
+
- `dtoCall.dtoFiles.create` - Create DTO path
|
|
45
|
+
- `dtoCall.dtoFiles.update` - Update DTO path
|
|
46
|
+
|
|
47
|
+
### Error Handling: DTOs
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
if (dtoCall.status === 'failed' || !dtoCall.dtoFiles) {
|
|
51
|
+
console.error(`MCP DTO generation failed: ${dtoCall.error}`);
|
|
52
|
+
console.log(`Suggested actions:`);
|
|
53
|
+
console.log(` 1. Verify entity name is PascalCase (e.g., "Product", not "product")`);
|
|
54
|
+
console.log(` 2. Verify entity properties are defined in DB`);
|
|
55
|
+
console.log(` 3. Run /mcp:healthcheck to verify MCP server connectivity`);
|
|
56
|
+
STOP; // Do NOT proceed to controller call
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Call 2: Generate Controller
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
const controllerCall = await mcp__smartstack__scaffold_extension({
|
|
66
|
+
type: "controller",
|
|
67
|
+
name: "{entityName}", // PascalCase from step 1
|
|
68
|
+
options: {
|
|
69
|
+
navRoute: "{permission_path}", // MANDATORY for NavRoute attribute
|
|
70
|
+
navRouteSuffix: null, // Optional: e.g., "details" → [NavRoute("path", Suffix = "details")]
|
|
71
|
+
dryRun: false
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Expected output:
|
|
76
|
+
// Api/Controllers/{area}/{entityName}Controller.cs with [NavRoute] attribute
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**From response, extract:**
|
|
80
|
+
- `controllerCall.controllerFile` - Controller path
|
|
81
|
+
- `controllerCall.navRouteAttribute` - NavRoute value (should match permission_path)
|
|
82
|
+
|
|
83
|
+
### Error Handling: Controller
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
if (controllerCall.status === 'failed' || !controllerCall.controllerFile) {
|
|
87
|
+
console.error(`MCP Controller generation failed: ${controllerCall.error}`);
|
|
88
|
+
console.log(`Note: DTOs were generated successfully (${dtoCall.dtoFiles.response})`);
|
|
89
|
+
console.log(`Suggested actions:`);
|
|
90
|
+
console.log(` 1. Verify navRoute format (e.g., "app.module.resource")`);
|
|
91
|
+
console.log(` 2. Run /mcp:healthcheck to verify MCP server connectivity`);
|
|
92
|
+
console.log(` 3. Check that DTOs were created (they should exist from Call 1)`);
|
|
93
|
+
STOP; // Do NOT proceed to step-04
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## NavRoute Validation
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
// Verify NavRoute is present in controller
|
|
103
|
+
const controllerContent = readFile(controllerCall.controllerFile);
|
|
104
|
+
|
|
105
|
+
if (!controllerContent.includes('[NavRoute(')) {
|
|
106
|
+
console.warn(`NavRoute attribute NOT FOUND in controller`);
|
|
107
|
+
console.warn(`Expected: [NavRoute("${permission_path}")]`);
|
|
108
|
+
console.warn(`Got: missing attribute`);
|
|
109
|
+
console.warn(`\nWithout NavRoute:`);
|
|
110
|
+
console.warn(` ❌ Frontend routes will be hardcoded`);
|
|
111
|
+
console.warn(` ❌ No automatic permission sync`);
|
|
112
|
+
console.warn(` ❌ Manual navigation management required`);
|
|
113
|
+
STOP;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Extract actual NavRoute value
|
|
117
|
+
const navRouteMatch = controllerContent.match(/\[NavRoute\("([^"]+)"\)/);
|
|
118
|
+
const actualNavRoute = navRouteMatch ? navRouteMatch[1] : null;
|
|
119
|
+
|
|
120
|
+
if (actualNavRoute !== permission_path) {
|
|
121
|
+
console.warn(`NavRoute mismatch:`);
|
|
122
|
+
console.warn(` Expected: "${permission_path}"`);
|
|
123
|
+
console.warn(` Got: "${actualNavRoute}"`);
|
|
124
|
+
// Warning only — proceed
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Success Output
|
|
131
|
+
|
|
132
|
+
```markdown
|
|
133
|
+
Generated Files:
|
|
134
|
+
|
|
135
|
+
| File | Path | Status |
|
|
136
|
+
|------|------|--------|
|
|
137
|
+
| DTO (Response) | {dtoResponsePath} | ✅ Created |
|
|
138
|
+
| DTO (Create) | {dtoCreatePath} | ✅ Created |
|
|
139
|
+
| DTO (Update) | {dtoUpdatePath} | ✅ Created |
|
|
140
|
+
| Controller | {controllerPath} | ✅ Created with [NavRoute] |
|
|
141
|
+
|
|
142
|
+
NavRoute Integration: ✅ Enabled
|
|
143
|
+
- [NavRoute("{permission_path}")]
|
|
144
|
+
- Frontend/backend sync active
|
|
145
|
+
- Permission-based navigation ready
|
|
146
|
+
|
|
147
|
+
Next: Synchronizing permissions in step-04...
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Post-Generation Checks
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
// 1. Verify all files created
|
|
156
|
+
const requiredFiles = [
|
|
157
|
+
dtoCall.dtoFiles.response,
|
|
158
|
+
dtoCall.dtoFiles.create,
|
|
159
|
+
dtoCall.dtoFiles.update,
|
|
160
|
+
controllerCall.controllerFile
|
|
161
|
+
];
|
|
162
|
+
|
|
163
|
+
for (const file of requiredFiles) {
|
|
164
|
+
if (!fileExists(file)) {
|
|
165
|
+
console.error(`File not found: ${file}`);
|
|
166
|
+
STOP;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// 2. Verify controller references DTOs correctly
|
|
171
|
+
const controllerContent = readFile(controllerCall.controllerFile);
|
|
172
|
+
const expectedDtoReferences = [
|
|
173
|
+
`${entityName}ResponseDto`,
|
|
174
|
+
`Create${entityName}Dto`,
|
|
175
|
+
`Update${entityName}Dto`
|
|
176
|
+
];
|
|
177
|
+
|
|
178
|
+
for (const ref of expectedDtoReferences) {
|
|
179
|
+
if (!controllerContent.includes(ref)) {
|
|
180
|
+
console.warn(`DTO reference missing in controller: ${ref}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 3. Verify NavRoute matches permission_path
|
|
185
|
+
if (!controllerContent.includes(`NavRoute("${permission_path}")`)) {
|
|
186
|
+
console.warn(`NavRoute value doesn't match permission_path`);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
console.log(`✅ All checks passed — controller ready for step-04`);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Fallback: Manual NavRoute
|
|
195
|
+
|
|
196
|
+
If MCP doesn't generate [NavRoute] attribute:
|
|
197
|
+
|
|
198
|
+
```csharp
|
|
199
|
+
// Manually add if missing:
|
|
200
|
+
[ApiController]
|
|
201
|
+
[Route("api/[controller]")]
|
|
202
|
+
[NavRoute("app.module.resource")] // <-- Add this line
|
|
203
|
+
public class {EntityName}Controller : ControllerBase
|
|
204
|
+
{
|
|
205
|
+
// ...
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
But this indicates MCP failure and should not be needed in normal operation.
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
| Permission Path | Parent Class |
|
|
14
14
|
|-----------------|--------------|
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
15
|
+
| `administration.*` | `Administration` |
|
|
16
|
+
| `support.*` | `Support` |
|
|
17
|
+
| `{application}.*` | `{Application}` |
|
|
18
|
+
| `myspace.*` | `MySpace` |
|
|
19
19
|
|
|
20
20
|
**Add nested class:**
|
|
21
21
|
|
|
@@ -29,24 +29,21 @@ public static class {module}
|
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
**Example for
|
|
32
|
+
**Example for support.tickets:**
|
|
33
33
|
|
|
34
34
|
```csharp
|
|
35
35
|
public static partial class Permissions
|
|
36
36
|
{
|
|
37
|
-
public static class
|
|
37
|
+
public static class Support
|
|
38
38
|
{
|
|
39
|
-
|
|
39
|
+
// Existing classes...
|
|
40
|
+
|
|
41
|
+
public static class Tickets // NEW
|
|
40
42
|
{
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
public
|
|
44
|
-
|
|
45
|
-
public const string View = "platform.support.tickets.read";
|
|
46
|
-
public const string Create = "platform.support.tickets.create";
|
|
47
|
-
public const string Update = "platform.support.tickets.update";
|
|
48
|
-
public const string Delete = "platform.support.tickets.delete";
|
|
49
|
-
}
|
|
43
|
+
public const string View = "support.tickets.read";
|
|
44
|
+
public const string Create = "support.tickets.create";
|
|
45
|
+
public const string Update = "support.tickets.update";
|
|
46
|
+
public const string Delete = "support.tickets.delete";
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
49
|
}
|
|
@@ -69,12 +69,12 @@ Arguments (after flags removed):
|
|
|
69
69
|
|
|
70
70
|
**Valid areas:**
|
|
71
71
|
|
|
72
|
-
| Area | Route Prefix | Permission
|
|
73
|
-
|
|
74
|
-
| `Admin` | `api/admin/` | `
|
|
75
|
-
| `Support` | `api/support/` | `
|
|
76
|
-
| `Business` | `api/business/` | `
|
|
77
|
-
| `User` | `api/user/` | `
|
|
72
|
+
| Area | Route Prefix | Permission Path Prefix |
|
|
73
|
+
|------|--------------|----------------------|
|
|
74
|
+
| `Admin` | `api/admin/` | `administration.` |
|
|
75
|
+
| `Support` | `api/support/` | `support.` |
|
|
76
|
+
| `Business` | `api/business/` | `{application}.` |
|
|
77
|
+
| `User` | `api/user/` | `myspace.` |
|
|
78
78
|
| `Auth` | `api/auth/` | (AllowAnonymous) |
|
|
79
79
|
|
|
80
80
|
**If {area} missing or invalid:**
|
|
@@ -128,10 +128,10 @@ Examples:
|
|
|
128
128
|
**Based on {area}:**
|
|
129
129
|
|
|
130
130
|
```
|
|
131
|
-
Admin → {permission_path} = "
|
|
132
|
-
Support → {permission_path} = "
|
|
133
|
-
Business → {permission_path} = "
|
|
134
|
-
User → {permission_path} = "
|
|
131
|
+
Admin → {permission_path} = "administration.{module_lowercase}"
|
|
132
|
+
Support → {permission_path} = "support.{module_lowercase}"
|
|
133
|
+
Business → {permission_path} = "{application_lowercase}.{module_lowercase}"
|
|
134
|
+
User → {permission_path} = "myspace.{module_lowercase}"
|
|
135
135
|
Auth → {permission_path} = null (AllowAnonymous)
|
|
136
136
|
```
|
|
137
137
|
|
|
@@ -165,7 +165,7 @@ Controller: {area}/{module}Controller
|
|
|
165
165
|
| {area} | Admin |
|
|
166
166
|
| {module} | Users |
|
|
167
167
|
| {entity} | User |
|
|
168
|
-
| {permission_path} |
|
|
168
|
+
| {permission_path} | administration.users |
|
|
169
169
|
| {auto_mode} | true/false |
|
|
170
170
|
| {postman_mode} | true/false |
|
|
171
171
|
| {dto_mode} | true/false |
|