Yes I think so more or less, but I would suggest this fix could improve + reduce issues like this in the future.
A fix on your side could be regenerating the hash that is to be stored in the cache at the end of the method from the textsInDatabase to ensure it captures any existing texts records stored in the db.
Thanks Maliming. I see the issue I had when I QA'ed this which is why I thought they didn't get deleted. I think it might be something wrong with the way the hash of the text records caching is created.
My steps were:
ExternalLocalizationSaver
code in it.When I run step 2, there are changes to the localization resource so the hashes of the db versus the .json
file are different so it doesn't exit early from the UpdateResourceTextChangesAsync
method. However, because I'm using an older version of the ExternalLocalizationSaver
, the localizations in the db field do not get deleted. The hash for the resource gets updated into the cache, using the hash calculated from the localizedStrings
- the raw .json
text records.
When I run step 3 with the new ExternalLocalizationSaver
, it exits early because the hashes are the same. This means it doesn't delete the old text records from the db field.
I've fixed this by clearing the cache between steps 2 and 3 which ensures it does not return early from the UpdateResourceTextChangesAsync
method.
A fix on your side could be regenerating the hash that is to be stored in the cache at the end of the method from the textsInDatabase
to ensure it captures any existing texts records stored in the db.
Thanks Maliming. I can see this implements the option to delete old resources however the deleted text records in a resource dont get removed from the db still. Is this something that is being added? Thanks.
Hi
We're trying to hide certain localisations from the users in the frontend and ran into a problem and the eventual cause seems to be the ExternalLocalizationStore
service not deleting old localisations from the ExternalLocalizationStore
table. We found this out after we deployed a fix to our staging environment that removed a localization key value - however this did not get propagated to the database or the api/abp/application-localization
api, meaning we could see the value we wanted to removed in the response.
I have solved this by disabling the ExternalStore
feature and deleting the values from the AbpLocalizationTexts
database table however this isn't ideal as it means we no longer have the ability to edit the localizations using the Language Management UI (since our localisations are distributed across different webhosts).
There is a similar problem with the AbpLocalizationResources
table where the resource does not get removed if you delete it from the application altogether.
Steps:
en.json
AbpExternalLocalizationOptions
.SaveToExternalStore
is set to true
in the host configuration.en.json
gets added to the AbpLocalizationTexts
tableen.json
fileAbpLocalizationTexts
table still shows the keys you have just deleted.If this is the intended behaviour and just requires manual patching each time we make changes to the .json
files it is disappointing as it adds additional overhead to deployments.
Is there a fix for this that deletes older keys from the db to ensure only the latest is shown to the users? We are using ABP commercial 7.3.3.
Thank you ! :)
hi fjinc
You can use
IIdentitySessionRepository
to remove all user sessions.https://github.com/abpframework/abp/blob/dev/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentitySessionRepository.cs#L90-L94
Thanks maliming. I'm more suggesting a new ABP feature by adding to the existing setting management for Session management I'm aware we can make extensions to add this behaviour ourselves but it seems that it would be a useful feature to have for other people too.
i.e. on this session setting page, as the host tenant admin user, I can enable settings to apply for all users of all tenancies
hi fjinc
across all tenants and their users from the Host tenant?
By default, users will not be across tenants. Can you explain it in detail?
Hi maliming, What I mean is, as the Host tenant, I want to enforce all users across the application to use a specific session setting (eg 'Logout from all devices') so that I can force all the users of my application to have better security practices
At the moment, I can only enforce this for the users of my tenancy which means to enforce for users in another tenant I have to impersonate the tenant admin and set the setting. It would be useful if we can do this all from our Host tenant admin account.
Hi We've recently upgraded our ABP version to v8.2 and we're excited to try the new Session management - particularly being able to enforce all user's of the application to have only one user on one device at any time.
Our application is a tenanted one, I wonder if it would be possible to add to the Session setting page the ability to enforce the same session management across all tenants and their users from the Host tenant?
Great thank you, please let me know what version the fix will be included in.
Hi,
Yes, that's is. I will create an internal issue to fix it; thanks.
Hi liangshiwei, Has there been any update on this / eta for when it will be fixed?