Обновление разрешений из кэша в памяти с помощью 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