我有作为事件处理程序的一部分运行的代码,需要创建一个新的 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。