Commit Graph

38 Commits

Author SHA1 Message Date
wren 76ba7e65ed feat: add backend rule group and permission support 2026-05-06 09:40:37 +08:00
wren 7acbe0f1d9 chore: ignore playwright mcp cache 2026-05-06 09:19:53 +08:00
wren 2d3a0f31de feat: complete review detail backend chain 2026-05-06 09:19:03 +08:00
wren 23b5445ff8 docs: add comprehensive handoff document 2026-04-30 14:31:53 +08:00
wren acdcfeb0be fix: add /document-types to visible route whitelist and permission map 2026-04-30 14:27:06 +08:00
wren 283c8228b2 feat: add document-types route and permissions to admin seeds 2026-04-30 14:13:33 +08:00
wren e6e129c70e fix: parse date strings to date objects for asyncpg compatibility 2026-04-30 13:09:24 +08:00
wren 52c2bed4f9 feat: add document type CRUD with inline rule set binding
- GET/POST /api/document-types, GET/PUT/DELETE /api/document-types/{id}
- DocumentTypeItemVO extended with description, entryModuleId,
  isEnabled, ruleSetIds
- Create/Update DTOs accept ruleSetIds array for automatic
  leaudit_rule_type_bindings sync (full replace on update)
- Soft delete cascades to rule_type_bindings
2026-04-30 12:50:56 +08:00
wren 32f56f7bf6 docs: add document-type and rule-binding analysis and migration plan 2026-04-30 12:37:00 +08:00
wren 9e1b7a6de7 feat: add queue status endpoint for upload page
GET /api/v2/system/queue/status returns counts of documents
by processing_status (waiting/processing) from leaudit_documents,
plus processing document IDs for the frontend progress display.
2026-04-30 12:32:37 +08:00
wren 969c3aaf35 docs: add document upload/list API analysis and integration plan 2026-04-30 12:29:00 +08:00
wren 8f307aecba feat: add document-types endpoint and date/user filters to list
- GET /api/document-types: returns {id, name, code} from
  leaudit_document_types, with optional ?ids=1,2,3 filter
- GET /api/documents/list: added userId, dateFrom, dateTo
  query params for filtering by uploading user and date range
2026-04-30 12:28:55 +08:00
wren b6d7f154ad fix: enforce fine-grained read/write permissions on all rbac admin endpoints
Previously only CreateRole/UpdateRole/DeleteRole checked specific
permission keys. Now every endpoint enforces its corresponding
permission:
  ListRoles/GetRoleRoutes/GetRolePermissions → rbac:roles:read
  ListUsers/ListRoleUsers/GetUserRoles       → rbac:users:read
  AssignUserRoles/RevokeUserRole             → rbac:user_roles:write
  UpdateRoleRoutes                           → rbac:role_routes:write
  SaveRolePermissions                        → rbac:role_permissions:write
  GetRoutePermissions                        → rbac:permissions:read
2026-04-30 11:23:09 +08:00
wren ab31c808d7 fix: show permission display_name instead of key in 403 errors
Previously _assertPermission raised "缺少权限: rbac:roles:delete".
Now it looks up the display_name from the permissions table and
shows "缺少「删除角色」权限".
2026-04-30 11:18:06 +08:00
wren 292b18760c fix: add global exception handler for BusinessException
BusinessException (and its subclass LeauditException) had no
FastAPI exception handler, so they escaped as unhandled 500s
even when carrying the correct status code (e.g. 403). Add a
handler that renders the status code and message as a proper
JSON response.
2026-04-30 11:13:07 +08:00
wren c16bb841de fix: restrict area bypass to super_admin only
Previously provincial_admin also skipped entry module area
filtering, making areas configuration meaningless for them.
Now only super_admin bypasses — provincial_admin and below
must match their area against the module's areas list.
2026-04-30 10:58:37 +08:00
wren 33255e823f fix: enforce fine-grained rbac permissions on role CRUD endpoints
Add _assertPermission() that checks role_permissions table for
specific permission keys (super_admin bypasses). Wire it into
CreateRole (rbac:roles:create), UpdateRole (rbac:roles:update),
and DeleteRole (rbac:roles:delete). Previously only the coarse
can_manage role check was enforced, making the permission grants
in role_permissions purely cosmetic for these endpoints.
2026-04-30 10:36:38 +08:00
wren 19c70d23be docs: document /home route fix and entry-module troubleshooting guide
Record the internal-document entry module issue where /home was
missing from role_route, causing the entry to be filtered out.
Add troubleshooting order and cross-reference between entry
modules, sys_routes, and role_route.
2026-04-30 10:35:18 +08:00
wren 3a58f19d6c feat: add rbac-backed settings modules 2026-04-29 22:25:06 +08:00
wren b3ad4a6f33 feat: bootstrap user rbac foundation 2026-04-29 15:23:19 +08:00
wren b45d61fa97 feat: add document versioning and list API 2026-04-29 11:48:50 +08:00
wren f3b83c9979 feat: add async worker queues and retry controls 2026-04-29 11:48:09 +08:00
wren e738398eb6 feat: wire native leaudit upload flow 2026-04-28 16:53:16 +08:00
wren c776af598a refactor: region from document, not app config
- Add region column to leaudit_documents + LeauditDocument model
- AuditServiceImpl: read region from document.region, not APP_REGION
- RuleServiceImpl: ListBindings/CreateBinding accept Region parameter
- RuleBindingCreateDTO: add region field
- RuleController: pass region from query param/DTO to service
- APP_REGION removed from binding queries; region flows from document

Region is now per-document: each document carries its region at upload
time, and rules are matched to the document's region at run time.
2026-04-28 14:19:29 +08:00
wren e80e8febd8 feat: multi-region rule isolation — region column + config + queries
- DB: add region column to leaudit_rule_sets + leaudit_rule_type_bindings
- DB: change UNIQUE constraint from (rule_type) to (rule_type, region)
- Config: add APP_REGION to app.toml + AppSettings + __init__.pyi
- AuditServiceImpl: filter bindings by APP_REGION
- RuleServiceImpl: ListBindings/CreateBinding use APP_REGION
- Seed script: accept --region arg, tag rules by region
- OssPathUtils: BuildRuleYamlKey already accepts Region parameter

Each region can now have its own independent copy of the same rule_type,
stored in separate OSS paths and DB rows, keyed by region.
2026-04-28 13:15:26 +08:00
wren 4e706f0d19 chore: drop leaudit_evaluation_points and leaudit_evaluation_point_groups tables
No code references these tables — they were from an earlier design
superseded by DSL YAML rule evaluation via leaudit_rule_results.
2026-04-28 12:44:56 +08:00
wren a4169e237e fix: OSS URL store object key only, not absolute path
- OssClient.UploadBytes/UploadText now return object key (relative path)
- Add OssClient.BuildObjectKey method as canonical key builder
- OssClient.BuildObjectUrl preserved for direct-link scenarios
- OssPathUtils.BuildRuleYamlKey/BuildRuleValidationReportKey accept Region
- DB migration: convert 20 existing absolute URLs to object keys
2026-04-28 12:29:01 +08:00
wren 2d108c8381 feat: M4 seed — upload & publish 20 rule sets, fix config/schema column names
- Fix _export_settings for pydantic v2 compatibility (model_fields)
- Fix delete_time→deleted_at, update_time→updated_at in RuleServiceImpl
- Add OssClient.EnsureBucket method
- Replace contract_lease/sale/tech rules.yaml from new-rules
- Seed script: batch upload 20 rule YAMLs to OSS + write DB + publish
- Config: fix OSS import chain
2026-04-28 12:13:46 +08:00
wren 246c0e5ded feat: complete M1-M3 infrastructure — OSS client, native execution chain, rule lifecycle API, system docs
- M1: unified OSS client (upload/download/presign) + path utils + config
- M2: rule service with validate/create/publish/rollback + binding CRUD endpoints
- M3: native AuditCtx runner, file/rule resolvers, storage adapter with full persistence
- docs: SYSTEM_OVERVIEW.md as comprehensive architecture reference
- fix: double finalize — terminal state now written once by finalize_run
2026-04-28 11:49:55 +08:00
wren be9fc4856b docs: add fix-double-finalize-and-bindings-api implementation plan 2026-04-28 11:44:31 +08:00
wren 1b4e0ec00a feat: add rule type binding CRUD endpoints to RuleController 2026-04-28 11:44:21 +08:00
wren d310ba8bc0 feat: implement binding CRUD in RuleServiceImpl 2026-04-28 11:44:20 +08:00
wren 6d7a342c77 feat: add binding CRUD methods to IRuleService interface 2026-04-28 11:44:20 +08:00
wren 2230ea826e feat: add RuleBindingVO for rule type bindings response 2026-04-28 11:44:04 +08:00
wren 896a8c1dd9 feat: add RuleBindingCreateDTO and RuleBindingUpdateDTO 2026-04-28 11:44:04 +08:00
wren 0a726ebf21 fix: remove premature result_status/finished_at from save_evaluation_results
finalize_run() is the single source of truth for terminal run state.
Previously save_evaluation_results wrote a binary pass/fail status and
finished_at BEFORE rescue outcomes/metrics were saved, then finalize_run
overwrote it. Now scores only are written here; terminal state is set
once by finalize_run after all sub-results are persisted.
2026-04-28 11:43:52 +08:00
wren 72a9b8e393 chore: commit .claude/ project-level config and skills
Remove .claude/ from .gitignore — project-level Claude Code
configuration should be shared with the team.
2026-04-27 16:58:19 +08:00
wren 535d97a70c chore: initial commit — leaudit-platform project skeleton
17-table PostgreSQL schema with full Chinese column comments,
FastAPI project structure (admin/common/modules),
DSL rule files, and schema migration scripts.
2026-04-27 16:48:22 +08:00