У меня есть код, который выполняется как часть обработчика событий и ему нужно создать новый сеанс TOM.NET(я не могу повторно использовать subject.Session
). Этот обработчик событий загружается во многие процессы Tridion (TcmServiceHost, COM +, Publisher, TcmTemplateDebugHost, пул приложений IIS), и эти процессы могут:
- выполняется под идентификатором, имеющим доступ к Tridion (например, приложение COM + выполняется под MTSUser, которое является администратором Tridion)
- выполняется под идентификатором, который не имеет доступа к Tridion, но ему разрешено выдавать себя за пользователей Tridion (например, TcmServiceHost работает как NetworkService, который настроен как пользователь олицетворения Tridion).
Я пытаюсь удовлетворить оба случая с помощью этого кода TOM.NET:
Session session = null;
try
{
session = new Session();
}
catch (AccessDeniedException ex)
{
// this process doesn't have TCM access, so impersonate a user that does
session = new Session("Administator");
}
if (session != null)
{
var item = session.GetObject(id);
...
Правильно ли это проверить, работает ли мой код в процессе, который имеет доступ к Tridion (игнорируя тот факт, что я жестко закодирован "Администратор" )? Код работает, но мне просто интересно, есть ли более эффективный способ выполнить проверку "имеет доступ к Tridion"?
Примечание: тот же вопрос возникает, когда я использую базовую услугу для доступа к Tridion, поэтому вопрос заключается не в том, является ли TOM.NET правильным API для использования здесь.