Activities of "maliming"

hi

You can use Role-based / Policy-based authorization to customize your page and controller permissions.

https://learn.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-8.0&source=recommendations https://learn.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-8.0

https://github.com/abpframework/abp/pull/10152#issue-1007619207

No problem, Its same way.

hi

Now what we want is that when we update the permissions of a role, and if that role is assigned to a user in a tenant, it should immediately reflect the updated permissions for that tenant user.

I think these codes should works

eventData.Entity.Name is the permission name eventData.Entity.ProviderName is the R eventData.Entity.ProviderKey is the role name

You can get all permission names and remove them.

foreach(var permissionName in permissionNames)
{
     var cacheKey = CalculateCacheKey(
            permissionName,
            eventData.Entity.ProviderName, // R
            eventData.Entity.ProviderKey // role name
        );
}
public override async Task HandleEventAsync(EntityChangedEventData<PermissionGrant> eventData)
{
    var cacheKey = CalculateCacheKey(
        eventData.Entity.Name,
        eventData.Entity.ProviderName,
        eventData.Entity.ProviderKey
    );

    var tenants = await TenantStore.GetListAsync();

    foreach (var tenant in tenants)
    {
        using (CurrentTenant.Change(tenant.Id))
        {
            await Cache.RemoveAsync(cacheKey, considerUow: true);
        }
    }
}

hi

Can you try to replace the ILocalizableStringSerializer with MyLocalizableStringSerializer?

if (value.IsNullOrEmpty())
{
    return new FixedLocalizableString(string.Empty);
}

if (value.Length < 3 ||
    value[1] != ':')
{
    return new FixedLocalizableString(value);
}
using System;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;

namespace Volo.Abp.Localization;

[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ILocalizableStringSerializer))]
public class MyLocalizableStringSerializer : ILocalizableStringSerializer, ITransientDependency
{
    protected AbpLocalizationOptions LocalizationOptions { get; }

    public MyLocalizableStringSerializer(IOptions<AbpLocalizationOptions> localizationOptions)
    {
        LocalizationOptions = localizationOptions.Value;
    }

    public virtual string? Serialize(ILocalizableString? localizableString)
    {
        if (localizableString == null)
        {
            return null;
        }

        if (localizableString is LocalizableString realLocalizableString)
        {
            return $"L:{realLocalizableString.ResourceName},{realLocalizableString.Name}";
        }

        if (localizableString is FixedLocalizableString fixedLocalizableString)
        {
            return $"F:{fixedLocalizableString.Value}";
        }

        throw new AbpException($"Unknown {nameof(ILocalizableString)} type: {localizableString.GetType().FullName}");
    }

    public virtual ILocalizableString Deserialize(string value)
    {
        if (value.IsNullOrEmpty())
        {
            return new FixedLocalizableString(string.Empty);
        }

        if (value.Length < 3 ||
            value[1] != ':')
        {
            return new FixedLocalizableString(value);
        }

        var type = value[0];
        switch (type)
        {
            case 'F':
                return new FixedLocalizableString(value.Substring(2));
            case 'L':
                var commaPosition = value.IndexOf(',', 2);
                if (commaPosition == -1)
                {
                    throw new AbpException("Invalid LocalizableString value: " + value);
                }

                var resourceName = value.Substring(2, commaPosition - 2);
                var name = value.Substring(commaPosition + 1);
                if (name.IsNullOrWhiteSpace())
                {
                    throw new AbpException("Invalid LocalizableString value: " + value);
                }

                return LocalizableString.Create(name, resourceName);
            default:
                return new FixedLocalizableString(value);
        }
    }
}

hi

abp_v8_devexpress_reports_v24\aspnet-core\src\Innoppia.DevExpressReports.HttpApi.Host> dotnet run

I can run the HttpApi.Host project without error. Do I need other steps to reproduce?

hi

Can you share some screenshots to show the component you want to override?

What is the UI type of your app?

  1. Blazor Server
  2. Blazor WASM
  3. Blazor WebApp(hybrid server and wasm)

hi

Can you write it in English?

  • ABP Framework version: vX.X.X
  • UI Type: Angular / MVC / Blazor WASM / Blazor Server
  • Database System: EF Core (SQL Server, Oracle, MySQL, PostgreSQL, etc..) / MongoDB
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes/no
  • Exception message and full stack trace:
  • Steps to reproduce the issue:

Thanks.

Thanks. I will check it asap.

hi

Can you share logs.txt of all of your websites?

Thanks.

liming.ma@volosoft.com

hi

Cannot resolve parameter 'Volo.Abp.OpenIddict.Tokens.IOpenIddictTokenRepository repository'

This generally indicates you haven't depended on the EF Core layer.

Please share full Logs.txt file. Thanks.

liming.ma@volosoft.com

Showing 4781 to 4790 of 12932 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.8.0-preview. Updated on November 02, 2026, 06:56
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.