Activities of "maliming"

hi

It has nothing to do with cmskit page, it is a separate page to implement your KB-articles and supports multiple languages

Thanks.

ok. Then TourOperatorClientCredentialsClaimsHandler is no problem.

Thanks.

hi

Can you share here? Our Angular team may also check it.

Thanks.

hi

You can add an IAbpClaimsPrincipalContributor, no need the TourOperatorClientCredentialsClaimsHandler

public class SocialSecurityNumberClaimsPrincipalContributor : IAbpClaimsPrincipalContributor, ITransientDependency
{
    public async Task ContributeAsync(AbpClaimsPrincipalContributorContext context)
    {
        var identity = context.ClaimsPrincipal.Identities.FirstOrDefault();
        var userId = identity?.FindUserId();
        if (userId.HasValue)
        {
            var userService = context.ServiceProvider.GetRequiredService<IUserService>(); //Your custom service
            var socialSecurityNumber = await userService.GetSocialSecurityNumberAsync(userId.Value);
            if (socialSecurityNumber != null)
            {
                identity.AddClaim(new Claim("SocialSecurityNumber", socialSecurityNumber));
            }
        }
    }
}


public static class CurrentUserExtensions
{
    public static string GetSocialSecurityNumber(this ICurrentUser currentUser)
    {
        return currentUser.FindClaimValue("SocialSecurityNumber");
    }
}

Then add it to the access token or id token.

public class MyClaimDestinationsHandler : IAbpOpenIddictClaimsPrincipalHandler, ITransientDependency
{
    public virtual Task HandleAsync(AbpOpenIddictClaimsPrincipalHandlerContext context)
    {
        foreach (var claim in context.Principal.Claims)
        {
            if (claim.Type == "SocialSecurityNumber")
            {
                claim.SetDestinations(OpenIddictConstants.Destinations.AccessToken, OpenIddictConstants.Destinations.IdentityToken);
            }

        return Task.CompletedTask;
    }
}

Configure<AbpOpenIddictClaimsPrincipalOptions>(options =>
{
    options.ClaimsPrincipalHandlers.Add<MyClaimDestinationsHandler>();
});

hi

I checked your new logs. How many permission in your app?

The logs show there are over 1600 permissions.


Is the application also slow during local development? Or does it only become slow after deployment? What are your server specifications?


Can you also share a test username &password of https://dev.hxxxxx.com/ website?

I will try to reproduce it online.

Thanks.

hi

I mean, you can create a Razor page to implement the KB-articles feature, cmk page doesn't support multiple languages for now.

Thanks.

Answer

hi

You can add a MyLeptonXThemeToolbarContributor to fix that.

private void ConfigureTheme()
{
    Configure<LeptonXThemeOptions>(options =>
    {
        options.DefaultStyle = LeptonXStyleNames.System;
    });

    Configure<LeptonXThemeBlazorOptions>(options =>
    {
        // When Layout is changed, the `options.Parameters["LeptonXTheme.Layout"]` in OPUSNovaBlazorModule.cs should be updated accordingly.
        //options.Layout = LeptonXBlazorLayouts.SideMenu;
        options.Layout = typeof(MdiLayout);
    });

    Configure<AbpToolbarOptions>(options =>
    {
        options.Contributors.Add(new MyLeptonXThemeToolbarContributor());
    });
}
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using OPUSNova.Blazor.Client.Components.Layout;
using Volo.Abp.AspNetCore.Components.Web.LeptonXTheme;
using Volo.Abp.AspNetCore.Components.Web.Theming.Toolbars;
using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXTheme.Components.ApplicationLayout.SideMenu.MainHeader;
using Volo.Abp.LeptonX.Shared;

namespace OPUSNova.Blazor.Client.Navigation;

public class MyLeptonXThemeToolbarContributor : IToolbarContributor
{
    public async Task ConfigureToolbarAsync(IToolbarConfigurationContext context)
    {
        if (context.Toolbar.Name == LeptonXToolbars.Main)
        {
            var options = context.ServiceProvider.GetRequiredService<IOptions<LeptonXThemeBlazorOptions>>();
            await options.SetAsync();

            if (options.Value.Layout == typeof(MdiLayout))
            {
                context.Toolbar.Items.Insert(0, new ToolbarItem(typeof(MainHeaderToolbarUserMenu), order: -1));
            }
        }
    }
}

hi

Can you share more debug/error logs?

liming.ma@volosoft.com

Thanks.

hi

You can add Razor page for the same purpose, It support localizaion by inject IHtmlLocalizer<TestResource> Localizer

https://abp.io/docs/latest/framework/fundamentals/localization

Thanks.

hi

We will adjust Angular to display name and surname in the next patch version.

Also, how could we disable/hide everything but the logout button in this absurdly complicated user menu that make it seem like you are logged in as an admin even though it is a normal user?

Our Angular team will guide you in removing the menu items.

For MVC:

You can add a new MyUserMenuContributor to remove them.

PostConfigure<AbpNavigationOptions>(options =>
{
    options.MenuContributors.Add(new MyUserMenuContributor());
});
public class MyUserMenuContributor : IMenuContributor
{
    public virtual Task ConfigureMenuAsync(MenuConfigurationContext context)
    {
        if (context.Menu.Name != StandardMenus.User)
        {
            return Task.CompletedTask;
        }

        context.Menu.TryRemoveMenuItem("Account.LinkedAccounts");
        context.Menu.TryRemoveMenuItem("Account.AuthorityDelegation");
        context.Menu.TryRemoveMenuItem("Account.ExternalLogins");

        return Task.CompletedTask;
    }
}

Thanks.

Showing 1 to 10 of 11990 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.2.0-preview. Updated on February 17, 2026, 09:10
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.