fix(service-auto): PrimeVue Dropdown + document CALENDAR grant for ROA_WEB
ComandaNoua.vue folosea `primevue/select` (PrimeVue v4+), dar proiectul rulează
pe v3.48.0 unde componenta se numește `Dropdown`. Cauză a erorii 500 la load-ul
rutei /service-auto/comanda-noua: "Failed to resolve import primevue/select".
grants-audit.md: adăugat `GRANT SELECT ON {SCHEMA}.CALENDAR TO ROA_WEB` în
template-ul de onboarding §4.1 și în tabelul sumar §4.5. CALENDAR e accesat de
`shared/routes/calendar.py` pentru period selector-ul din AppHeader — necesar
pe orice server unde userul poate face login, nu doar service-auto.
DBA action separată: `GRANT SELECT ON MARIUSM_AUTO.CALENDAR TO ROA_WEB`.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -116,6 +116,8 @@ Onboarding-ul ROA_WEB = 1 script rulat după impdp:
|
|||||||
GRANT EXECUTE ON FIRMA_NOUA.SP_CREEAZA_COMANDA_PROTOTIP TO ROA_WEB;
|
GRANT EXECUTE ON FIRMA_NOUA.SP_CREEAZA_COMANDA_PROTOTIP TO ROA_WEB;
|
||||||
GRANT SELECT ON FIRMA_NOUA.AUTO_VMASINICLIENTI TO ROA_WEB;
|
GRANT SELECT ON FIRMA_NOUA.AUTO_VMASINICLIENTI TO ROA_WEB;
|
||||||
GRANT SELECT ON FIRMA_NOUA.DEV_TIP_DEVIZ TO ROA_WEB;
|
GRANT SELECT ON FIRMA_NOUA.DEV_TIP_DEVIZ TO ROA_WEB;
|
||||||
|
GRANT SELECT ON FIRMA_NOUA.CALENDAR TO ROA_WEB;
|
||||||
|
-- CALENDAR folosit de shared/routes/calendar.py (period selector AppHeader)
|
||||||
-- adaugă orice alte SP/view-uri noi apărute de la ultimul onboarding
|
-- adaugă orice alte SP/view-uri noi apărute de la ultimul onboarding
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -194,6 +196,7 @@ ROLLBACK;
|
|||||||
| Firmă nouă (`impdp`) | `onboarding_roa_web.sql` cu schema nouă | 1 script per firmă |
|
| Firmă nouă (`impdp`) | `onboarding_roa_web.sql` cu schema nouă | 1 script per firmă |
|
||||||
| SP nou în toate schemele | `migration_YYYYMMDD_sp_noua_grants.sql` (loop V_NOM_FIRME) | 1 script per migrare |
|
| SP nou în toate schemele | `migration_YYYYMMDD_sp_noua_grants.sql` (loop V_NOM_FIRME) | 1 script per migrare |
|
||||||
| View/tabelă nouă expusă | același pattern ca SP | 1 script per migrare |
|
| View/tabelă nouă expusă | același pattern ca SP | 1 script per migrare |
|
||||||
|
| Expunere `CALENDAR` pentru period selector | `GRANT SELECT {SCHEMA}.CALENDAR TO ROA_WEB` per schemă | 1 linie per schemă (parte din onboarding §4.1) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
||||||
Firmă *
|
Firmă *
|
||||||
</label>
|
</label>
|
||||||
<Select
|
<Dropdown
|
||||||
v-model="form.id_firma"
|
v-model="form.id_firma"
|
||||||
:options="firme"
|
:options="firme"
|
||||||
option-label="firma"
|
option-label="firma"
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
placeholder="Selectează firma"
|
placeholder="Selectează firma"
|
||||||
:disabled="isSubmitting || loadingFirme"
|
:disabled="isSubmitting || loadingFirme"
|
||||||
:loading="loadingFirme"
|
:loading="loadingFirme"
|
||||||
fluid
|
class="w-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
||||||
Tip comandă *
|
Tip comandă *
|
||||||
</label>
|
</label>
|
||||||
<Select
|
<Dropdown
|
||||||
v-model="form.tip_id"
|
v-model="form.tip_id"
|
||||||
:options="tipuriComanda"
|
:options="tipuriComanda"
|
||||||
option-label="denumire"
|
option-label="denumire"
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
placeholder="Selectează tipul comenzii"
|
placeholder="Selectează tipul comenzii"
|
||||||
:disabled="isSubmitting || loadingTipuri"
|
:disabled="isSubmitting || loadingTipuri"
|
||||||
:loading="loadingTipuri"
|
:loading="loadingTipuri"
|
||||||
fluid
|
class="w-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
<label style="font-weight: var(--font-medium); font-size: var(--text-sm); color: var(--text-color-secondary);">
|
||||||
Client / Mașină *
|
Client / Mașină *
|
||||||
</label>
|
</label>
|
||||||
<Select
|
<Dropdown
|
||||||
ref="clientDropdownRef"
|
ref="clientDropdownRef"
|
||||||
v-model="form.id_masiniclient"
|
v-model="form.id_masiniclient"
|
||||||
:options="masini"
|
:options="masini"
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
:disabled="isSubmitting || loadingMasini"
|
:disabled="isSubmitting || loadingMasini"
|
||||||
:loading="loadingMasini"
|
:loading="loadingMasini"
|
||||||
filter
|
filter
|
||||||
fluid
|
class="w-full"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, onMounted, nextTick } from 'vue'
|
import { ref, computed, onMounted, nextTick } from 'vue'
|
||||||
import { useToast } from 'primevue/usetoast'
|
import { useToast } from 'primevue/usetoast'
|
||||||
import Select from 'primevue/select'
|
import Dropdown from 'primevue/dropdown'
|
||||||
import Textarea from 'primevue/textarea'
|
import Textarea from 'primevue/textarea'
|
||||||
import Button from 'primevue/button'
|
import Button from 'primevue/button'
|
||||||
import Toast from 'primevue/toast'
|
import Toast from 'primevue/toast'
|
||||||
|
|||||||
Reference in New Issue
Block a user