Sensenet: разрешение узла становится более старым после обновления разрешений
У меня есть разрешение на изменение узла путем обновления таблиц "SecurityEntries" и "SecurityCustomeEntries" с использованием прямого вызова базы данных (не через API). Я обнаружил, что он выбирает более старые значения из API, даже значения таблицы базы данных были успешно обновлены. Мне нужно последнее обновленное значение из API. Как я могу получить это?
Обновить Query For Deny AddNew разрешение
Update SecurityEntries set PermissionValue7 = '2' AND PermissionValue15 = '2' where DefinedOnNodeId = 'XXXX' AND PrincipalId='XXXXX';
Проверьте разрешение "AddNew" после обновления над запросом (который возвращает true)
node.Security.HasPermission((IUser)emailUserObj, PermissionType.AddNew);
Вышеуказанный метод API HasPermission возвращает старое значение.
Я заметил еще одну вещь: когда я создаю любой другой новый узел, тогда он (метод "HasPermission") показывает последнее значение разрешений для вышеупомянутого узла.
Есть ли кеширование или что-то еще?
1 ответ
Да, sensenet кэширует значения разрешений для ускорения оценки разрешений. Было бы очень медленно, если бы мы смотрели в базу данных каждый раз, когда требуется проверка разрешения. Это одна из причин, по которой не рекомендуется изменять разрешения непосредственно в базе данных. Другая причина - это может что-то сломать, если вы сделаете несовместимое изменение:).
Пожалуйста, сделайте это через наш API, либо используя серверный API C# разрешения (ссылаясь на основной пакет Сервисов) или клиентскую сторону C# api (используя .Net клиент).
Изменение разрешений, создание контента или перезапуск сайта сбрасывает этот кеш, поэтому вы видите изменения после того, как что-то создали.