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 клиент).

Изменение разрешений, создание контента или перезапуск сайта сбрасывает этот кеш, поэтому вы видите изменения после того, как что-то создали.

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