Sensenet: разрешение узла становится более старым после обновления разрешений - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть разрешение на изменение узла путем обновления таблиц «SecurityEntries» и «SecurityCustomeEntries» с использованием прямого вызова базы данных (не через API).Я обнаружил, что он выбирает более старые значения из API, даже значения таблицы базы данных были успешно обновлены.Мне нужно последнее обновленное значение из API.Как я могу его получить?

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

0 голосов
/ 28 сентября 2018

Да, sensenet кэширует значения разрешений для ускорения оценки разрешений.Было бы очень медленно, если бы мы смотрели в базу данных каждый раз, когда требуется проверка разрешения.Это одна из причин, по которой не рекомендуется изменять разрешения непосредственно в базе данных.Другая причина в том, что она может что-то сломать, если вы внесете несовместимое изменение:).

Пожалуйста, сделайте это через наш API, либо с помощью серверного API разрешения c # (ссылаясь на основной пакет служб), либо на клиентской стороне c #api (с использованием .Net-клиента ).

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

...