【问题标题】:Refresh permissions from in-memory cache with ASP.NET Boilerplate使用 ASP.NET 样板从内存缓存中刷新权限
【发布时间】:2018-04-11 08:16:26
【问题描述】:

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

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

我可以调用 ABP 中的“强制刷新”函数来使用数据库中的最新权限刷新内存存储吗?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      如果您的第 3 方应用程序想要更改设置,它应该通过 WebAPI 方法进行。所以你需要创建一个应用服务并添加一个类似ChangeSettingValue({settingName, settingValue})的方法。

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

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

      【讨论】:

      • 感谢您指出这一点。我需要一种方法来重置针对它运行自动化 UI 测试的权限。
      • 无论如何,都需要手动触发cacheManager.clear()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2013-04-28
      • 2017-07-21
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多