使用ASP.NET Boilerplate从内存缓存刷新权限

时间:2018-04-11 08:16:27

标签: caching asp.net-boilerplate cache-invalidation

当我通过运行SQL更新脚本在数据库中显式设置用户权限时,具有最新授权的特定权限不会反映在系统中。但是,当我回收IIS进程或重建解决方案时,它似乎只是更新。

看起来框架正在使用某种内存存储来检查权限。

ABP中是否有“强制刷新”功能,我可以使用数据库中的最新权限来刷新内存存储?

奇怪的是,当通过前端设置权限时,权限在没有IIS回收的情况下按预期工作,因此它肯定会调用某种功能来更新其缓存。

2 个答案:

答案 0 :(得分:1)

您可以注入ICacheManager并清除缓存:

public void ForceRefresh()
{
    _cacheManager.GetUserPermissionCache().Clear();
 // _cacheManager.GetRolePermissionCache().Clear();
}

答案 1 :(得分:0)

设置管理器在服务器端缓存设置,因此不应使用存储库或数据库更新查询直接更改设置值。

如果您的第三方应用程序想要更改设置,则应通过WebAPI方法执行此操作。因此,您需要创建一个应用程序服务并添加类似ChangeSettingValue({settingName, settingValue})的方法。

在此应用服务中注入ISettingManager,并使用ChangeSettingForApplicationAsyncChangeSettingForTenantAsyncChangeSettingForUserAsync方法(以及同步版本)更改应用程序的设置,对于租户和分别为用户。

参见相关文档> https://aspnetboilerplate.com/Pages/Documents/Setting-Management