使用 ASP.NET 样板从内存缓存中刷新权限
Refresh permissions from in-memory cache with ASP.NET Boilerplate
当我通过 运行 一个 SQL 更新脚本为数据库中的用户显式设置权限时,具有最新授予的特定权限未反映在系统中。但是,当我回收 IIS 进程或重建解决方案时,它似乎才更新。
看起来框架正在使用某种内存存储来检查权限。
我可以调用 ABP 中的 "force refresh" 函数来使用数据库的最新权限刷新内存存储吗?
奇怪的是,通过前端设置权限时,没有IIS回收,权限确实按预期工作,所以它肯定调用了某种函数来更新它的缓存。
您可以注入ICacheManager
并清除缓存:
public void ForceRefresh()
{
_cacheManager.GetUserPermissionCache().Clear();
// _cacheManager.GetRolePermissionCache().Clear();
}
设置管理器在 server-side 上缓存设置,因此您不应使用存储库或数据库更新查询直接更改设置值。
如果您的第 3 方应用程序想要更改设置,它应该通过 WebAPI 方法来完成。因此,您需要创建一个应用程序服务并添加一个类似于 ChangeSettingValue({settingName, settingValue})
的方法。
在此应用程序服务中注入 ISettingManager
,并使用 ChangeSettingForApplicationAsync
、ChangeSettingForTenantAsync
或 ChangeSettingForUserAsync
方法(和同步版本)更改应用程序的设置,对于分别为租户和用户。
查看相关文档 > https://aspnetboilerplate.com/Pages/Documents/Setting-Management
当我通过 运行 一个 SQL 更新脚本为数据库中的用户显式设置权限时,具有最新授予的特定权限未反映在系统中。但是,当我回收 IIS 进程或重建解决方案时,它似乎才更新。
看起来框架正在使用某种内存存储来检查权限。
我可以调用 ABP 中的 "force refresh" 函数来使用数据库的最新权限刷新内存存储吗?
奇怪的是,通过前端设置权限时,没有IIS回收,权限确实按预期工作,所以它肯定调用了某种函数来更新它的缓存。
您可以注入ICacheManager
并清除缓存:
public void ForceRefresh()
{
_cacheManager.GetUserPermissionCache().Clear();
// _cacheManager.GetRolePermissionCache().Clear();
}
设置管理器在 server-side 上缓存设置,因此您不应使用存储库或数据库更新查询直接更改设置值。
如果您的第 3 方应用程序想要更改设置,它应该通过 WebAPI 方法来完成。因此,您需要创建一个应用程序服务并添加一个类似于 ChangeSettingValue({settingName, settingValue})
的方法。
在此应用程序服务中注入 ISettingManager
,并使用 ChangeSettingForApplicationAsync
、ChangeSettingForTenantAsync
或 ChangeSettingForUserAsync
方法(和同步版本)更改应用程序的设置,对于分别为租户和用户。
查看相关文档 > https://aspnetboilerplate.com/Pages/Documents/Setting-Management