Devexpress Blazore项目前端页面基类

using System;
using System.Threading.Tasks;
using Blazored.LocalStorage;
using Blazored.Toast.Services;
using Microsoft.AspNetCore.Components;
using Client.Services;
using Data.Models;

namespace Client.Classes.Impl
{
    public class MinimalComponentBase : ComponentBase
    {
        #region Inject section

        [Inject] protected IApiService ApiService { get; set; }
        [Inject] protected IUserService UserService { get; set; }
        [Inject] protected NavigationManager NavigationManager { get; set; }
        [Inject] protected IToastService ToastService { get; set; }
        [Inject] protected ILocalStorageService LocalStorageService { get; set; }

        #endregion
        
        #region Parameters

        [Parameter] public bool ReadOnly { get; set; }
        
        #endregion
        
        #region Protected properties

        protected ClaimTypes RequiredClaimType { get; set; }
        protected bool IsAdmin { get; set; }
        protected bool CanCreate { get; set; }
        protected bool CanEdit { get; set; }
        protected bool CanDelete { get; set; }
        protected bool CanRestore { get; set; }
        protected string ApiUrl { get; set; }
        protected bool IsValidating { get; set; } = true;
        protected bool IsFreeAccess { get; set; }
        protected bool IsOnlyAdmin { get; set; }

        #endregion

        #region Protected methods

        protected virtual async Task InitComponent(TgClaimTypes requireClaimType, string apiUrl)
        {
            ApiUrl = apiUrl;
            RequiredClaimType = requireClaimType;
            await ValidatePermission();

            ApiService.SetBaseUrl(ApiUrl);
        }

        protected void RedirectToLoginPage()
        {
            var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri);
            var url = "/login";
            if (string.IsNullOrEmpty(returnUrl) == false) url += $"?returnUrl={returnUrl}";

            NavigationManager.NavigateTo(url);
        }

        protected void RedirectToErrorPage(string errorMessage)
        {
            NavigationManager.NavigateTo("/error");
        }

        protected void RedirectToAccessDeniedPage()
        {
            NavigationManager.NavigateTo("/access-denied");
        }

        // Must validate permission on initialized
        protected async Task ValidatePermission()
        {
            await UserService.LoadAsync();
           // IsAdmin = UserService.IsAdminLevel;
            IsAdmin = true;
            var permission = await UserService.GetPermissionAsync(RequiredClaimType);
            if (ApiService.IsSessionExpired) RedirectToLoginPage();
            if (ApiService.IsError) RedirectToErrorPage(ApiService.ErrorMessage);

            if (IsOnlyAdmin && IsAdmin == false) RedirectToAccessDeniedPage();
            
            if (IsFreeAccess == false)
            {
                CanEdit = ((permission?.Value ?? -1) >= TgPermissions.Update.Value || IsAdmin) && ReadOnly == false;
                if ((permission?.Value ?? -1) < TgPermissions.View.Value && IsAdmin == false)
                    RedirectToAccessDeniedPage();
            }

            IsValidating = false;
        }

        #endregion
    }
}

你可能感兴趣的:(PLC,WCS系统)