Обновление разрешений из кэша в памяти с помощью ASP.NET Boilerplate

Когда я явно устанавливаю разрешение для пользователя в базе данных с помощью сценария обновления SQL, конкретное разрешение с последним предоставлением не отражается в системе. Однако, когда я перезагружаю процесс IIS или перестраиваю решение, кажется, что только тогда он обновляется.

Похоже, что фреймворк использует какое-то хранилище в памяти для проверки разрешений.

Есть ли в ABP функция принудительного обновления, которую я могу вызвать, чтобы обновить хранилище в памяти с последними разрешениями из базы данных?

Странная вещь заключается в том, что при установке разрешения через интерфейс, разрешение работает, как и ожидалось, без повторного использования IIS, поэтому оно определенно вызывает какую-то функцию для обновления своего кэша.

2 ответа

Решение

Вы можете ввести ICacheManager и очистить кеш:

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

Диспетчер настроек кэширует настройки на стороне сервера, поэтому не следует напрямую изменять значение параметра с помощью запроса на обновление репозитория или базы данных.

Если ваше стороннее приложение хочет изменить настройку, оно должно сделать это с помощью методов WebAPI. Таким образом, вам нужно создать службу приложений и добавить метод что-то вроде ChangeSettingValue({settingName, settingValue}),

В этом приложении сервис вводить ISettingManagerи использовать ChangeSettingForApplicationAsync, ChangeSettingForTenantAsync или же ChangeSettingForUserAsync методы (и версии синхронизации) для изменения настроек приложения, арендатора и пользователя соответственно.

См. Связанные документы> https://aspnetboilerplate.com/Pages/Documents/Setting-Management

Другие вопросы по тегам