AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2024, 22:33   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
1. Отдельные команды assert() - взаимоисключающие. Т.е. последующий assert() вызывает конфликт с ранее настроенным assert(). Непонятно, а какие же права надо настраивать? Будет ошибка "Multiple calls to CodeAccessPermission.Assert"

Если надо дать несколько разных типов прав, то используют специальную конструкцию CodeAccessPermission::assertMultiple() с переданным списком типов

2.
assert - это дать права
demand - это запросить права (проверить наличие), настроенные ранее.

Т.е. demand сам по себе никаких прав не дает. Это своеобразная "напоминалка" о том, что такие права надо бы дать ранее в коде.

Если в коде встречается fileIOPerm.demand(), то это означает, что где-то ранее должна была быть команда fileIOPerm.assert()

// check file I/O permission - обратите внимание на слово "check".
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: S.Kuskov (5), axm2017 (7).
Старый 22.03.2024, 10:39   #2  
Lankey is offline
Lankey
Участник
 
61 / 13 (1) ++
Регистрация: 19.05.2020
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
2.
assert - это дать права
demand - это запросить права (проверить наличие), настроенные ранее.

Т.е. demand сам по себе никаких прав не дает. Это своеобразная "напоминалка" о том, что такие права надо бы дать ранее в коде.

Если в коде встречается fileIOPerm.demand(), то это означает, что где-то ранее должна была быть команда fileIOPerm.assert()
.
Спасибо большое!

Не могли бы Вы пояснить немного:
1) Зачем существует demand, если уже и так запросили, что нужно, через assert ? Это как-то зависит от того, где запросили (на сервере или клиенте?) или у assert есть scope? Я же не "напоминаю" коду о том. что объявила перееменные или там вызывала функции ранее
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
// check file I/O permission - обратите внимание на слово "check".
Я бы поняла, если бы была проверкка типа "If demand() = false" then asset() .... но так этот метод не используется.

2) Почему мы запрашиваем разными классами (InteropPermission и fileIOPermission), что логично, а вот убираем одной CodeAccessPermission::revertAssert(), а не отдельно fileIOPermission::revertAssert и InteropPermission ::revertAssert .

3) revertAssert , как я понимаю, отменит все запросы, даже те, что были наложены в вызывающей функции , а не текущей?

4) revertAssert зачастую в конце кода, где выше по тексту запросили уже права, не делается. Это ошибка или есть в этом логика?
Старый 22.03.2024, 11:08   #3  
axm2017 is offline
axm2017
Участник
 
1,777 / 293 (13) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от Lankey Посмотреть сообщение
1) Зачем существует demand, если уже и так запросили, что нужно, через assert ?
Подозреваю что
Принудительно создает SecurityException во время выполнения, если все вызывающие методы, расположенные выше в стеке вызовов, не получили разрешения, указанного текущим экземпляром.
https://learn.microsoft.com/ru-ru/do...t-plat-ext-8.0
Старый 22.03.2024, 11:15   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,283 / 3491 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Сразу оговорюсь - правильный ответ могут дать только архитекторы MS, которые задумывали эту логику. Нам лишь остается строить гипотезы. Тем не менее:

Цитата:
Сообщение от Lankey Посмотреть сообщение
Не могли бы Вы пояснить немного:
1) Зачем существует demand, если уже и так запросили, что нужно, через assert ? Это как-то зависит от того, где запросили (на сервере или клиенте?) или у assert есть scope? Я же не "напоминаю" коду о том. что объявила перееменные или там вызывала функции ранее
Я бы поняла, если бы была проверкка типа "If demand() = false" then asset() .... но так этот метод не используется.
Полагаю, что это связано с тем, что разные разработчики пишут код. Одни пишут требования (demand), другие реализуют выдачу разрешений (assert).
Аналогию можно провести с абстрактными методами. Один разработчик пишет метод и добавляет ему модификатор abstract, а другой (создавая наследник класса) вынужден перекрывать абстрактный метод, т.к. это требование первоначального разработчика

Цитата:
Сообщение от Lankey Посмотреть сообщение
2) Почему мы запрашиваем разными классами (InteropPermission и fileIOPermission), что логично, а вот убираем одной CodeAccessPermission::revertAssert(), а не отдельно fileIOPermission::revertAssert и InteropPermission ::revertAssert .
Классы InteropPermission и fileIOPermission являются наследниками CodeAccessPermission. Полагаю, что выдача разрешений специфична и зависит от типа разрешения, а отзыв разрешения мог быть реализован единым методом вне зависимости от типа разрешения. Точно также, как метод finalize() может быть реализован на базовом классе, а метод new мы выполняем индивидуально на каждом наследнике.

Цитата:
Сообщение от Lankey Посмотреть сообщение
3) revertAssert , как я понимаю, отменит все запросы, даже те, что были наложены в вызывающей функции , а не текущей?
4) revertAssert зачастую в конце кода, где выше по тексту запросили уже права, не делается. Это ошибка или есть в этом логика?
Отменится последнее выданное разрешение в текущем методе. Тут есть некоторый момент... Разрешение отзывается по завершению метода. Аналог - переменные типа Class. В конце области видимости переменной - она сама уничтожается и нет необходимости вызывать метод finalize().
Т.е. "для красоты кода" - нужно выдавать разрешения и их отзывать. Но... если разрешения не отозвать - то код "не сломается", хотя всякие Best Practice конечно скажут, что выданное разрешение надо обязательно отозвать.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Lankey (1).
Теги
ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
InteropPermission в пакетном режиме jonny DAX: Программирование 7 03.09.2020 09:49
InteropPermission vizir DAX: Программирование 3 08.11.2017 11:07
Delete actions не работают по невидимым полям McArrow DAX: Программирование 3 02.03.2013 09:58
Сбой запроса на разрешение типа "FileIOPermission" Silphidae DAX: Программирование 17 13.04.2009 14:30
Исследование - Как работают разные типы Delete Actions. sguryev DAX: База знаний и проекты 1 10.05.2002 15:46

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:23.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.