- Menu items use url='{{entire_url('/module/table')}}' format
- init_permissions.py now registers both the page path and CRUD API endpoints
- Page path: /{module}/{table} (for menu navigation)
- API paths: /{module}/api/{table}_{list|create|update|delete}.dspy
- Create menu.ui for each module (customer_management, opportunity_management, contract_management, financial_management, workflow_approval, unified_dashboard)
- Update main app index.ui to use submenu: "{{entire_url('/module/menu.ui')}}" format for each module menu item
- Each menu.ui contains CRUD items for all module tables plus other UI/DSpy functionality
Per bricks-framework specification:
- Text/Title controls: use 'text' for non-i18n text, 'otext'+'i18n:true' for i18n
- Button controls: use 'label' for button display text
- Menu items now use {{entire_url('/module')}} instead of hardcoded paths
- Iframe src also uses {{entire_url()}}
- Register button in login.ui uses {{entire_url('/rbac/user/register.ui')}}
- Removed unnecessary binds for Menu widget (Menu handles click internally)
1. Replace manual DB_CONFIG with getConfig('.').databases for DBPools init
2. Add id=getID() when inserting into rolepermission table (id has no default value)
3. Sync app/ and root copies
- perm_config.py: all paths no longer use /main prefix
- init_permissions.py:
1. scan wwwroot including symlinks for .ui/.dspy/.js/.css
2. register paths without /main prefix
3. create admin_superuser user (super/Kyy@123456)
4. use orgtypeid='*' for role wildcard matching
- sync app/ and root copies
- perm_config.py: role definitions and permission matrix (underscore-based role IDs)
- init_permissions.py: permission initialization script
- .gitignore: add build artifacts exclusions
- Remove multi-org type design, single owner org only