log textwrap, menu permissions, others

This commit is contained in:
Adam 2024-07-02 12:02:34 +02:00
parent 8517864be4
commit d1a8f706d4
17 changed files with 199 additions and 266 deletions

View File

@ -5,6 +5,13 @@ namespace TIAM.Core.Consts;
public static class TiamConstClient public static class TiamConstClient
{ {
public static Guid TransferProductId = Guid.Parse("814b5495-c2e9-4f1d-a73f-37cd5d353078"); public static Guid TransferProductId = Guid.Parse("814b5495-c2e9-4f1d-a73f-37cd5d353078");
public static Guid[] DevAdminIds = new Guid[2]{Guid.Parse("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd"), Guid.Parse("4cbaed43-2465-4d99-84f1-c8bc6b7025f7") };
public static Guid[] SysAdmins = new Guid[3]
{
Guid.Parse("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd"),
Guid.Parse("4cbaed43-2465-4d99-84f1-c8bc6b7025f7"),
Guid.Parse("540271f6-c604-4c16-8160-d5a7cafedf00")
};
} }
public class TiamConst : AcConst public class TiamConst : AcConst

View File

@ -22,6 +22,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.6" />

View File

@ -46,7 +46,7 @@ namespace TIAM.Database.Test
//_userDal = new UserDal(_mockContext.Object); //_userDal = new UserDal(_mockContext.Object);
} }
//[TestMethod] [TestMethod]
public async Task ConvertOldPassword() public async Task ConvertOldPassword()
{ {
//var loginService = new LoginService(Dal, AppSettingsConfiguration); //var loginService = new LoginService(Dal, AppSettingsConfiguration);

View File

@ -56,7 +56,7 @@ namespace TIAMMobileApp
builder.Services.AddScoped<ISupplierService, SupplierService>(); builder.Services.AddScoped<ISupplierService, SupplierService>();
builder.Services.AddScoped<IUserDataService, UserDataServiceMobile>(); builder.Services.AddScoped<IUserDataService, UserDataServiceMobile>();
builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>(); builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>();
builder.Services.AddScoped<ISessionService, SessionServiceMobile>(); builder.Services.AddSingleton<ISessionService, SessionServiceMobile>();
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceMobile>(); builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceMobile>();
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>(); builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
builder.Services.AddScoped<IClientNoticeSenderService, ClientNoticeSenderService>(); builder.Services.AddScoped<IClientNoticeSenderService, ClientNoticeSenderService>();

View File

@ -9,6 +9,10 @@ namespace TIAMMobileApp.Services
public string? SessionId { get; set; } public string? SessionId { get; set; }
public UserSessionModel? User { get; set; } public UserSessionModel? User { get; set; }
public IPAddress? IPAddress { get; set; } public IPAddress? IPAddress { get; set; }
public bool IsAuthenticated { get; set; } public bool IsAuthenticated { get; set; } = false;
public bool HasCompany { get; set; } = false;
public bool IsDriver { get; set; } = false;
public bool IsDevAdmin { get; set; } = false;
public bool IsSysAdmin { get; set; } = false;
} }
} }

View File

@ -1,5 +1,6 @@
@* @page "/"; *@ @* @page "/"; *@
@using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Authorization
@using TIAM.Core.Consts
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models @using TIAMWebApp.Shared.Application.Models
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@ -107,9 +108,9 @@
string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value; string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value; string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId)); var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId));
sessionService.User = user; SaveToSessionInfo(user);
_logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state"); _logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state");
sessionService.IsAuthenticated = true;
//NavManager.NavigateTo("/"); //NavManager.NavigateTo("/");
} }
else else
@ -121,6 +122,29 @@
} }
protected void SaveToSessionInfo(UserSessionModel user)
{
sessionService.User = user;
sessionService.IsAuthenticated = true;
sessionService.HasCompany = user.UserModelDto.UserProductMappings.Count > 0;
if (user.UserModelDto.UserProductMappings.Any(x => x.ProductId == TiamConstClient.TransferProductId))
{
sessionService.IsDriver = true;
}
if (user.UserModelDto.Id == TiamConstClient.DevAdminIds[0] || user.UserModelDto.Id == TiamConstClient.DevAdminIds[1])
{
sessionService.IsDevAdmin = true;
}
foreach (var guid in TiamConstClient.SysAdmins)
{
if (user.UserModelDto.Id == guid)
{
sessionService.IsSysAdmin = true;
}
}
_logger.Debug($"Saved to session: IsAuthenticated: {sessionService.IsAuthenticated}, HasCompany: {sessionService.HasCompany}, IsDriver: {sessionService.IsDriver}, IsDevAdmin: {sessionService.IsDevAdmin}, IsSysAdmin: {sessionService.IsSysAdmin}");
}
public async Task<(string, string)> GetLocalSettings() public async Task<(string, string)> GetLocalSettings()
{ {
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails)); string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));

View File

@ -10,6 +10,7 @@ using TIAMSharedUI.Resources;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using AyCode.Services.Loggers; using AyCode.Services.Loggers;
using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Authorization;
using TIAM.Core.Consts;
namespace TIAMSharedUI.Pages namespace TIAMSharedUI.Pages
{ {
@ -159,6 +160,23 @@ namespace TIAMSharedUI.Pages
{ {
sessionService.User = user; sessionService.User = user;
sessionService.IsAuthenticated = true; sessionService.IsAuthenticated = true;
sessionService.HasCompany = user.UserModelDto.UserProductMappings.Count > 0;
if(user.UserModelDto.UserProductMappings.Any(x=>x.ProductId==TiamConstClient.TransferProductId))
{
sessionService.IsDriver = true;
}
if (user.UserModelDto.Id == TiamConstClient.DevAdminIds[0] || user.UserModelDto.Id == TiamConstClient.DevAdminIds[1])
{
sessionService.IsDevAdmin = true;
}
foreach (var guid in TiamConstClient.SysAdmins)
{
if (user.UserModelDto.Id == guid)
{
sessionService.IsSysAdmin = true;
}
}
BrowserConsoleLogWriter.Debug($"Saved to session: IsAuthenticated: {sessionService.IsAuthenticated}, HasCompany: {sessionService.HasCompany}, IsDriver: {sessionService.IsDriver}, IsDevAdmin: {sessionService.IsDevAdmin}, IsSysAdmin: {sessionService.IsSysAdmin}");
} }
} }
} }

View File

@ -1,10 +1,9 @@
@page "/user/hoteladmin" @page "/user/hoteladmin/{id}"
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces; @using TIAMWebApp.Shared.Application.Interfaces;
@layout AdminLayout @layout AdminLayout
@inject IPopulationStructureDataProvider DataProvider
@inject ISupplierService SupplierService
@inject IUserDataService UserDataService @inject IUserDataService UserDataService
@inject ISessionService SessionService
<PageTitle>HotelAdmin</PageTitle> <PageTitle>HotelAdmin</PageTitle>
<div class="text-center m-5"> <div class="text-center m-5">
@ -16,179 +15,31 @@
<div class="container"> <div class="container">
<HotelComponent Id="@Id"></HotelComponent> <HotelComponent Id="@id"></HotelComponent>
<!-- Stats admin--> <!-- Stats admin-->
<hr /> <hr />
@* <div class="row py-3">
<div class=" col-12 col-xl-3">
<div class="card glass card-admin" style="border-radius: 16px;">
<div class="card-header py-2 px-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-bold text-body">Panel title</span>
<p class="text-muted mb-0">Subtitle</p>
</div>
<div>
<h6 class="mb-0"> <a href="#">All details</a> </h6>
</div>
</div>
</div>
<div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2">
<div class="flex-fill">
<h5 class="bold">Some info</h5>
<p class="text-muted"> Budapest, Dózsa György út 35, 1146</p>
</div>
<div>
<!--img class="align-self-center img-fluid"
src="https://mdbcdn.b-cdn.net/img/Photos/Horizontal/E-commerce/Products/6.webp" width="250"-->
</div>
</div>
<ul id="progressbar-1" class="mx-0 mt-0 mb-5 px-0 pt-0 pb-4">
<li class="step0 active" id="step1">
<span style="margin-left: 22px; margin-top: 12px;">PLACED</span>
</li>
<li class="step0 active text-center" id="step2"><span>WAITING FOR PICK UP</span></li>
<li class="step0 text-muted text-end" id="step3">
<span style="margin-right: 22px;">FINISHED</span>
</li>
</ul>
<div class="d-flex flex-row mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4>
</div>
</div>
<div class="card-footer py-2 px-4">
<div class="d-flex justify-content-between">
<a href="#!">Modify</a>
<div class="border-start h-100"></div>
</div>
</div>
</div>
</div>
<div class=" col-12 col-xl-3">
<div class="card glass card-admin" style="border-radius: 16px;">
<div class="card-header py-2 px-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-bold text-body">Panel title</span>
<p class="text-muted mb-0">Subtitle</p>
</div>
<div>
<h6 class="mb-0"> <a href="#">All details</a> </h6>
</div>
</div>
</div>
<div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2">
<div class="flex-fill">
<h5 class="bold">Some info</h5>
<p class="text-muted"> Budapest, Dózsa György út 35, 1146</p>
</div>
<div>
<!--img class="align-self-center img-fluid"
src="https://mdbcdn.b-cdn.net/img/Photos/Horizontal/E-commerce/Products/6.webp" width="250"-->
</div>
</div>
<ul id="progressbar-1" class="mx-0 mt-0 mb-5 px-0 pt-0 pb-4">
<li class="step0 active" id="step1">
<span style="margin-left: 22px; margin-top: 12px;">PLACED</span>
</li>
<li class="step0 active text-center" id="step2"><span>WAITING FOR PICK UP</span></li>
<li class="step0 text-muted text-end" id="step3">
<span style="margin-right: 22px;">FINISHED</span>
</li>
</ul>
<div class="d-flex flex-row mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4>
</div>
</div>
<div class="card-footer py-2 px-4">
<div class="d-flex justify-content-between">
<a href="#!">Modify</a>
<div class="border-start h-100"></div>
</div>
</div>
</div>
</div>
<div class=" col-12 col-xl-3">
<div class="card glass card-admin" style="border-radius: 16px;">
<div class="card-header py-2 px-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-bold text-body">Panel title</span>
<p class="text-muted mb-0">Subtitle</p>
</div>
<div>
<h6 class="mb-0"> <a href="#">All details</a> </h6>
</div>
</div>
</div>
<div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2">
<div class="flex-fill">
<h5 class="bold">Some info</h5>
<p class="text-muted"> Budapest, Dózsa György út 35, 1146</p>
</div>
<div>
<!--img class="align-self-center img-fluid"
src="https://mdbcdn.b-cdn.net/img/Photos/Horizontal/E-commerce/Products/6.webp" width="250"-->
</div>
</div>
<ul id="progressbar-1" class="mx-0 mt-0 mb-5 px-0 pt-0 pb-4">
<li class="step0 active" id="step1">
<span style="margin-left: 22px; margin-top: 12px;">PLACED</span>
</li>
<li class="step0 active text-center" id="step2"><span>WAITING FOR PICK UP</span></li>
<li class="step0 text-muted text-end" id="step3">
<span style="margin-right: 22px;">FINISHED</span>
</li>
</ul>
<div class="d-flex flex-row mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4>
</div>
</div>
<div class="card-footer py-2 px-4">
<div class="d-flex justify-content-between">
<a href="#!">Modify</a>
<div class="border-start h-100"></div>
</div>
</div>
</div>
</div>
<div class=" col-12 col-xl-3">
</div>
</div> *@
</div> </div>
@code { @code {
string Id = "2312-32132121-32123"; [Parameter] public Guid id { get; set; }
bool isUserLoggedIn; bool isUserLoggedIn;
int userType = 0; int userType = 0;
protected override void OnInitialized() protected override void OnInitialized()
{ {
//check if Id matches with userproductmapping
if (!SessionService.IsAuthenticated)
{
return;
}
var check = SessionService.User.UserModelDto.UserProductMappings.Any(x => x.ProductId == id);
if (!check)
{
return;
}
base.OnInitialized(); base.OnInitialized();
} }

View File

@ -1,6 +0,0 @@
namespace TIAMSharedUI.Pages.User
{
public partial class Home
{
}
}

View File

@ -15,7 +15,7 @@ namespace TIAMSharedUI.Pages.User.Hotels
{ {
[Parameter] [Parameter]
public string? Id { get; set; } public Guid Id { get; set; }
[Inject] [Inject]
ISupplierService SupplierService { get; set; } ISupplierService SupplierService { get; set; }

View File

@ -1,6 +1,8 @@
@page "/user/properties" @page "/user/properties"
@using BlazorAnimation
@using TIAM.Entities.ServiceProviders @using TIAM.Entities.ServiceProviders
@using TIAM.Resources @using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@ -15,62 +17,37 @@
@inject ISessionService SessionService @inject ISessionService SessionService
@inject IServiceProviderDataService ServiceProviderDataService @inject IServiceProviderDataService ServiceProviderDataService
@inject AdminSignalRClient AdminSignalRClient; @inject AdminSignalRClient AdminSignalRClient;
<PageTitle>User permissions</PageTitle>
<h3>Properties</h3> <div class="text-center m-5">
<h1>Drivers</h1>
<h2 style="font-size:small">Manage drivers here!</h2>
</div>
<div class="container">
<div class="row">
<div class=" col-12 col-xl-6">
<div class="card glass card-admin" style="border-radius: 16px;">
<div class="card-header py-2 px-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-bold text-body">Service providers list</span>
<div class="container-fluid">
<div class="row">
<div class=" col-12">
<Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div class="card">
<div class="d-flex flex-column mb-4 pb-2">
<div class="align-self-end pl-2 pb-2">
<DxButton Text="Column Chooser"
RenderStyle="ButtonRenderStyle.Secondary"
IconCssClass="btn-column-chooser"
Click="ColumnChooserButton_Click" />
</div> </div>
<div>
<!--div class="target-container" @onclick="@(() => EulaVisible = true)">
<button class="btn btn-primary">Create</button>
</div-->
</div>
</div>
</div>
<div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2">
@*<DxPopup CssClass="popup-demo-events"
@bind-Visible="@EulaVisible"
ShowFooter="true"
CloseOnEscape="false"
CloseOnOutsideClick="false"
ShowCloseButton="true"
HeaderText="@localizer.GetString(ResourceKeys.ServiceProviderTitle)"
Closing="EulaPopupClosing"
Closed="EulaPopupClosed">
<BodyContentTemplate>
<InputWizard Data=@myModel OnSubmit="SubmitForm" SubmitButtonText=@ResourceKeys.ButtonSave TitleResourceString=@ResourceKeys.ServiceProviderTitle></InputWizard>
</BodyContentTemplate>
<FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer">
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
<!--DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="Context.CloseCallback" /-->
<DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text=@localizer.GetString(ResourceKeys.ButtonCancel) Click="CancelCreateClick" />
</div>
</FooterContentTemplate>
</DxPopup>*@
<CompanyGrid @ref="_gridCompany" <CompanyGrid @ref="_gridCompany"
Logger="_logger" Logger="_logger"
SignalRClient="AdminSignalRClient" SignalRClient="AdminSignalRClient"
ContextIds="contextIds"
PageSize="12" GetAllMessageTag="SignalRTags.GetCompaniesByContextId"
PageSize="12"
ValidationEnabled="false" ValidationEnabled="false"
DetailRowDisplayMode="GridDetailRowDisplayMode.Always" DetailRowDisplayMode="GridDetailRowDisplayMode.Always"
CustomizeEditModel="Grid_CustomizeEditModel" CustomizeEditModel="Grid_CustomizeEditModel"
EditMode="GridEditMode.EditRow"> EditMode="GridEditMode.EditRow">
<Columns> <Columns>
<DxGridCommandColumn Width="160px" /> <DxGridCommandColumn Width="160px" />
<DxGridDataColumn FieldName="Id" MinWidth="80"> <DxGridDataColumn FieldName="Id" MinWidth="80">
@ -78,30 +55,22 @@
<a class="d-block text-left" href="user/serviceprovider/@context.Value.ToString()">@context.Value</a> <a class="d-block text-left" href="user/serviceprovider/@context.Value.ToString()">@context.Value</a>
</CellDisplayTemplate> </CellDisplayTemplate>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="Name" MinWidth="80" /> <DxGridDataColumn Caption="Address" FieldName="Profile.Address.AddressText" MinWidth="80" />
<DxGridDataColumn FieldName="OwnerId" MinWidth="80" /> <DxGridDataColumn FieldName="Name" MinWidth="80" />
<DxGridDataColumn FieldName="Created" DisplayFormat="g" Width="140" />
<DxGridDataColumn FieldName="Modified" DisplayFormat="g" Width="140" />
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@{ @{
<text>@(((Company)context.DataItem).Profile.Address.AddressText)</text> <p>@(((Company)context.DataItem).Profile.Address.AddressText)</p>
} }
</DetailRowTemplate> </DetailRowTemplate>
</CompanyGrid> </CompanyGrid>
</div> </div>
<div class="d-flex flex-row mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4>
</div>
</div> </div>
</Animation>
</div>
</div> </div>
<div class=" col-12 col-xl-6"> <div class=" col-12 col-xl-6">
</div> </div>
@ -119,11 +88,10 @@
bool EulaAccepted { get; set; } bool EulaAccepted { get; set; }
bool EulaVisible { get; set; } bool EulaVisible { get; set; }
private Guid[] contextIds = new Guid[0];
void CancelCreateClick() void CancelCreateClick()
{ {
EulaVisible = false; EulaVisible = false;
} }
void EulaPopupClosed() void EulaPopupClosed()
@ -161,12 +129,18 @@
_logger = new LoggerClient<MyServiceProviders>(LogWriters.ToArray()); _logger = new LoggerClient<MyServiceProviders>(LogWriters.ToArray());
var myId = SessionService.User.UserId; var myId = SessionService.User.UserId;
contextIds = new Guid[1];
ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId, companyPropertiesByOwner => contextIds[0] = myId;
{ // ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId, companyPropertiesByOwner =>
_logger.DetailConditional($"companyPropertiesByOwner count: {companyPropertiesByOwner?.Count.ToString() ?? "NULL"}"); // {
}).Forget(); // _logger.DetailConditional($"companyPropertiesByOwner count: {companyPropertiesByOwner?.Count.ToString() ?? "NULL"}");
// }).Forget();
return base.OnInitializedAsync(); return base.OnInitializedAsync();
} }
void ColumnChooserButton_Click()
{
_gridCompany.ShowColumnChooser();
}
} }

View File

@ -21,7 +21,7 @@
<PageTitle>Admin - Companies</PageTitle> <PageTitle>Admin - Companies</PageTitle>
<div class="text-center m-5"> <div class="text-center m-5">
<h1>Company: @Id</h1> <h1>Company</h1>
<h2 style="font-size:small">Manage your service provider details</h2> <h2 style="font-size:small">Manage your service provider details</h2>
</div> </div>

View File

@ -55,10 +55,10 @@
@{ @{
var a = ((LogItemViewerModel)context.DataItem); var a = ((LogItemViewerModel)context.DataItem);
} }
<div>@($"{a.CategoryName}->{a.CallerName}")</div> <div><p>@($"{a.CategoryName}->{a.CallerName}")</p></div>
<div>@($"{a.Text}")</div><br /> <div><p>@($"{a.Text}")</p></div><br />
<div style="font-weight: bold;">Exception:</div> <div style="font-weight: bold;">Exception:</div>
<div style="word-wrap: break-word;">@a.Exception</div> <div><p style="text-wrap: wrap;">@a.Exception</p></div>
</DetailRowTemplate> </DetailRowTemplate>
<ToolbarTemplate> <ToolbarTemplate>
<div> <div>

View File

@ -1,6 +1,16 @@
@using TIAMWebApp.Shared.Application.Interfaces @using AyCode.Services.Loggers
@using Microsoft.AspNetCore.Components.Authorization
@using Newtonsoft.Json
@using TIAM.Core.Loggers
@using TIAMWebApp.Shared.Application.Interfaces
@using AyCode.Interfaces.StorageHandlers; @using AyCode.Interfaces.StorageHandlers;
@using TIAMWebApp.Shared.Application.Utility
@inject ISecureStorageHandler SecureStorageHandler @inject ISecureStorageHandler SecureStorageHandler
@inject ISessionService SessionService
@inject IUserDataService UserDataService
@inject AuthenticationStateProvider AuthStateProvider
@inject NavigationManager NavigationManager
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
<div class="w-100" style="height:40px; position:fixed;"> <div class="w-100" style="height:40px; position:fixed;">
@ -12,23 +22,29 @@
<DxMenuItem NavigateUrl="user/properties" Text="My companies" IconCssClass="menu-icon-home menu-icon" /> <DxMenuItem NavigateUrl="user/properties" Text="My companies" IconCssClass="menu-icon-home menu-icon" />
<DxMenuItem NavigateUrl="user/media" Text="Media" IconCssClass="menu-icon-home menu-icon" /> <DxMenuItem NavigateUrl="user/media" Text="Media" IconCssClass="menu-icon-home menu-icon" />
<DxMenuItem NavigateUrl="user/messages" Text="Media" IconCssClass="menu-icon-home menu-icon" /> <DxMenuItem NavigateUrl="user/messages" Text="Media" IconCssClass="menu-icon-home menu-icon" />
<DxMenuItem Text="SysAdmin" IconCssClass="menu-icon-products menu-icon"> <DxMenuItem Text="SysAdmin" Visible="@IsSysAdmin" IconCssClass="menu-icon-products menu-icon">
<Items> <Items>
<DxMenuItem NavigateUrl="user/sysadmin" Text="Dashboard" /> <DxMenuItem NavigateUrl="user/sysadmin" Text="Dashboard" />
<DxMenuItem NavigateUrl="sysadmin/transfers" Text="Transfers" /> <DxMenuItem NavigateUrl="sysadmin/transfers" Text="Transfers" />
<DxMenuItem NavigateUrl="sysadmin/destinations" Text="Destinations" /> <DxMenuItem NavigateUrl="sysadmin/destinations" Text="Destinations" />
<DxMenuItem NavigateUrl="sysadmin/companies" Text="Companies" /> <DxMenuItem NavigateUrl="sysadmin/companies" Text="Companies" />
<DxMenuItem NavigateUrl="sysadmin/prices" Text="Partner prices" /> <DxMenuItem NavigateUrl="sysadmin/prices" Text="Partner prices" />
<DxMenuItem NavigateUrl="sysadmin/products" Text="Services" /> <DxMenuItem NavigateUrl="sysadmin/products" Text="Services" />
<DxMenuItem NavigateUrl="sysadmin/drivers" Text="Drivers" /> <DxMenuItem NavigateUrl="sysadmin/drivers" Text="Drivers" />
<DxMenuItem NavigateUrl="sysadmin/cars" Text="Cars" /> <DxMenuItem NavigateUrl="sysadmin/cars" Text="Cars" />
<DxMenuItem NavigateUrl="sysadmin/userproductmappings" Text="Permissions" /> <DxMenuItem NavigateUrl="sysadmin/userproductmappings" Text="Permissions" />
<DxMenuItem NavigateUrl="sysadmin/users" Text="Users" /> <DxMenuItem NavigateUrl="sysadmin/users" Text="Users" />
<DxMenuItem NavigateUrl="sysadmin/logs" Text="Logs" /> </Items>
</Items> </DxMenuItem>
</DxMenuItem>
<DxMenuItem Text="DevAdmin" Visible="@IsDevAdmin" IconCssClass="menu-icon-products menu-icon">
<Items>
<DxMenuItem NavigateUrl="sysadmin/logs" Text="Logs" />
</Items>
</DxMenuItem>
<DxMenuItem Text="HotelAdmin" IconCssClass="menu-icon-support menu-icon"> <DxMenuItem Text="HotelAdmin" IconCssClass="menu-icon-support menu-icon">
<Items> <Items>
<DxMenuItem NavigateUrl="user/hoteladmin" Text="Dashboard" /> <DxMenuItem NavigateUrl="user/hoteladmin" Text="Dashboard" />
@ -184,9 +200,29 @@
private bool expandHotelAdminNav = false; private bool expandHotelAdminNav = false;
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private bool IsDevAdmin;
private bool IsSysAdmin;
private bool IsDriver;
private ILogger _logger;
MenuDisplayMode DisplayMode { get; set; } = MenuDisplayMode.Auto; MenuDisplayMode DisplayMode { get; set; } = MenuDisplayMode.Auto;
Orientation Orientation { get; set; } = Orientation.Horizontal; Orientation Orientation { get; set; } = Orientation.Horizontal;
protected override void OnInitialized()
{
_logger = new LoggerClient<AdminNavMenu>(LogWriters.ToArray());
_logger.Debug($"UserId: {SessionService.User.UserModelDto.Id}");
IsDevAdmin = SessionService.IsDevAdmin;
_logger.Debug($"UserId: {SessionService.IsDevAdmin}");
IsSysAdmin = SessionService.IsSysAdmin;
_logger.Debug($"UserId: {SessionService.IsSysAdmin}");
IsDriver = SessionService.IsDriver;
_logger.Debug($"UserId: {SessionService.IsDriver}");
base.OnInitialized();
}
private void ToggleNavMenu() private void ToggleNavMenu()
{ {
collapseNavMenu = !collapseNavMenu; collapseNavMenu = !collapseNavMenu;
@ -197,9 +233,22 @@
} }
private void SignOut() private async Task SignOut()
{ {
SecureStorageHandler.ClearAllSecureStorageAsync(); bool serverResult;
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
if (!string.IsNullOrEmpty(userDetailsStr))
{
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
serverResult = await UserDataService.Logout(userBasicDetail.RefreshToken);
}
await SecureStorageHandler.ClearAllSecureStorageAsync();
var result = await AuthStateProvider.GetAuthenticationStateAsync();
SessionService.User = null;
SessionService.IsAuthenticated = false;
NavigationManager.NavigateTo("/");
} }
} }

View File

@ -27,7 +27,7 @@ builder.Services.AddScoped<ISupplierService, SupplierService>();
builder.Services.AddScoped<IUserDataService, UserDataServiceWeb>(); builder.Services.AddScoped<IUserDataService, UserDataServiceWeb>();
builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>(); builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>();
builder.Services.AddBlazoredLocalStorage(); builder.Services.AddBlazoredLocalStorage();
builder.Services.AddScoped<ISessionService, SessionServiceWeb>(); builder.Services.AddSingleton<ISessionService, SessionServiceWeb>();
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>(); builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>();

View File

@ -10,5 +10,9 @@ namespace TIAMWebApp.Client.Services
public UserSessionModel? User { get; set; } public UserSessionModel? User { get; set; }
public IPAddress? IPAddress { get; set; } public IPAddress? IPAddress { get; set; }
public bool IsAuthenticated { get; set; } = false; public bool IsAuthenticated { get; set; } = false;
public bool HasCompany { get; set; } = false;
public bool IsDriver { get; set; } = false;
public bool IsDevAdmin { get; set; } = false;
public bool IsSysAdmin { get; set; } = false;
} }
} }

View File

@ -9,5 +9,12 @@ namespace TIAMWebApp.Shared.Application.Interfaces
public UserSessionModel? User { get; set; } public UserSessionModel? User { get; set; }
public IPAddress? IPAddress { get; set; } public IPAddress? IPAddress { get; set; }
public bool IsAuthenticated { get; set; } public bool IsAuthenticated { get; set; }
public bool HasCompany { get; set; }
public bool IsDriver { get; set; }
public bool IsDevAdmin { get; set; }
public bool IsSysAdmin { get; set; }
} }
} }