From aa1fe2ddafcd933d77d727a5d1175c9660cf5b01 Mon Sep 17 00:00:00 2001 From: Oussema Saafi Date: Mon, 2 Feb 2026 15:36:41 +0100 Subject: [PATCH] commit --- .../Pages/Anagrafiche/Operatore_Edit.razor | 4 +- .../Components/Pages/Anagrafiche/Ruoli.razor | 5 +- .../Pages/Anagrafiche/Ruoli_Edit.razor | 116 +++++++++++++++--- .../Model/PermissionRowViewModel.cs | 26 ++++ 4 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 TecniStamp/TecniStamp/Model/PermissionRowViewModel.cs diff --git a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Operatore_Edit.razor b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Operatore_Edit.razor index b2cda33..aaace71 100644 --- a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Operatore_Edit.razor +++ b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Operatore_Edit.razor @@ -141,8 +141,8 @@ model.RuoloId = Model.RuoloId; - await _managerService.UtenteService.Salva(model, Guid.Parse(idClaim)); - _navManager.NavigateTo($"/Anagrafiche/Operatori/Modifica/{Model.Id}"); + var operatoreSalvato = await _managerService.UtenteService.Salva(model, Guid.Parse(idClaim)); + _navManager.NavigateTo($"/Anagrafiche/Operatori/Modifica/{operatoreSalvato.Id}"); } catch (Exception ex) { diff --git a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli.razor b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli.razor index cd37195..119c5c7 100644 --- a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli.razor +++ b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli.razor @@ -2,6 +2,7 @@ @using Microsoft.EntityFrameworkCore @using TecniStamp.Model +@rendermode InteractiveServer Ruoli
@@ -64,10 +65,10 @@ } /// - /// Apre la pagina di modifica per il cliente selezionato. + /// Apre la pagina di modifica per il ruolo selezionato. /// private async Task EditRow(RuoloViewModel ruolo) { - _navManager.NavigateTo($"/Anagrafiche/Ruoli/Modifica/{ruolo.Id}"); + _navManager.NavigateTo($"/Anagrafiche/ruoli/Modifica/{ruolo.Id}"); } } diff --git a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli_Edit.razor b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli_Edit.razor index 3a419ba..8d196ea 100644 --- a/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli_Edit.razor +++ b/TecniStamp/TecniStamp/Components/Pages/Anagrafiche/Ruoli_Edit.razor @@ -4,8 +4,10 @@ @using Microsoft.EntityFrameworkCore @using TecniStamp.Domain @using TecniStamp.Model +@using TecniStamp.Utils @rendermode InteractiveServer +@inject AuthenticationStateProvider auth @pageTitle @@ -24,6 +26,7 @@
+
@@ -60,6 +63,28 @@
+ +
+
+ + + + + + + + + + + + +
+
+
@@ -69,16 +94,26 @@ [Parameter] public Guid? RuoloId { get; set; } public RuoloViewModel Model { get; set; } = new(); - + private List permessi { get; set; } = new(); + private RadzenDataGrid permessiGrid { get; set; } + private string pageTitle => Model?.Id == Guid.Empty ? "Nuovo Ruolo" : $"Modifica Ruolo {Model}"; - + protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - + Model = RuoloId.GetValueOrDefault() == Guid.Empty ? new RuoloViewModel() : await _managerService.RuoloService.RicercaPer(x => x.Id == RuoloId); + + var sections = (await + _managerService.SezioneService.RicercaQueryable(x => x.Eliminato == false, includi: x => x.Include(y => y.Features))).ToList(); + var permissions = await _managerService.PermissionService.RicercaQueryable(x => x.Ruolo.Id == Model.Id && x.Eliminato == false); + + permessi = []; + foreach (var section in sections) + permessi.AddRange(section.Features.Where(x => !x.Eliminato).Select(x => new PermissionRowViewModel(section, x, permissions)).ToList()); } /// @@ -88,29 +123,74 @@ /// private async Task onRuoloSave() { - var state = await _auth.GetAuthenticationStateAsync(); - var idClaim = state.User.FindFirst("UserId")?.Value; - if (string.IsNullOrEmpty(idClaim)) + try { - // gestisci errore (utente non autenticato o claim mancante) - return; + var state = await _auth.GetAuthenticationStateAsync(); + var idClaim = state.User.FindFirst("UserId")?.Value; + if (string.IsNullOrEmpty(idClaim)) + { + // gestisci errore (utente non autenticato o claim mancante) + return; + } + + var model = Model.Id == Guid.Empty + ? new Ruolo() + : await _managerService.RuoloService.RicercaPer(x => x.Id == Model.Id, solaLettura: false); + + model = Model.Map(model); + + var ruoloSalvato = await _managerService.RuoloService.Salva(model, Guid.Parse(idClaim)); + _navManager.NavigateTo($"/Anagrafiche/ruoli/Modifica/{ruoloSalvato.Id}"); + } + catch (Exception ex) + { + await _dialogService.Alert("Si è verificato un'errore", "Errore", new AlertOptions() { OkButtonText = "Continua" }); } - - var model = Model.Id == Guid.Empty - ? new Ruolo() - : await _managerService.RuoloService.RicercaPer(x => x.Id == Model.Id, solaLettura: false); - - model = Model.Map(model); - - await _managerService.RuoloService.Salva(model, Guid.Parse(idClaim)); - _navManager.NavigateTo($"/Anagrafiche/ruoli/Modifica/{Model.Id}"); } /// - /// Torna all’elenco utenti senza applicare altre azioni. + /// Torna all’elenco ruoli senza applicare altre azioni. /// private void backToHome() { _navManager.NavigateTo("/Anagrafiche/ruoli"); } + + void OnRender(DataGridRenderEventArgs args) + { + if (!args.FirstRender) return; + args.Grid.Groups.Add(new GroupDescriptor() { Property = "Nome", SortOrder = SortOrder.Descending }); + StateHasChanged(); + } + + /// + /// + /// + /// + /// + /// + private async Task onSelected(bool selected, PermissionRowViewModel permissionRow) + { + var idClaim = await MembershipUtils.GetUserId(auth); + + var ruoloPermission = await _managerService.PermissionService.RicercaPer( + x => x.RuoloId == Model.Id && x.IdFeature == permissionRow.IdFeature && x.Eliminato == false, + includi: x => x.Include(y => y.Ruolo).Include(y => y.Feature), + solaLettura: false); + + if (ruoloPermission == null && selected) + { + var permission = new Permission() + { + RuoloId = Model.Id, + IdFeature = permissionRow.IdFeature + }; + await _managerService.PermissionService.Salva(permission, idClaim); + } + else + { + await _managerService.PermissionService.Elimina(ruoloPermission?.Id ?? Guid.Empty, idClaim); + } + permissionRow.Selected = selected; + } } \ No newline at end of file diff --git a/TecniStamp/TecniStamp/Model/PermissionRowViewModel.cs b/TecniStamp/TecniStamp/Model/PermissionRowViewModel.cs new file mode 100644 index 0000000..462acfa --- /dev/null +++ b/TecniStamp/TecniStamp/Model/PermissionRowViewModel.cs @@ -0,0 +1,26 @@ +using TecniStamp.Domain; + +namespace TecniStamp.Model; + +public class PermissionRowViewModel +{ + public PermissionRowViewModel(Sezione section, Feature feature, IQueryable permissions) + { + Nome = section.Nome; + IdSezione = section.Id; + NomeFeature = feature.Nome; + DescrizioneFeature = feature.Descrizione; + IdFeature = feature.Id; + Ordinamento = section.Ordinamento; + OrdinamentoFeature = feature.Ordinamento; + Selected = permissions.Any(y => y.Feature.Id == feature.Id); + } + public Guid IdSezione { get; set; } + public string Nome { get; set; } + public Guid IdFeature { get; set; } + public string NomeFeature { get; set; } + public string DescrizioneFeature { get; set; } + public int Ordinamento { get; set; } + public int OrdinamentoFeature { get; set; } + public bool Selected { get; set; } +} \ No newline at end of file