イベント ハンドラーの一部として実行されるコードがあり、新しい TOM.NET セッションを作成する必要があります (再利用できませんsubject.Session
)。このイベント ハンドラーは、多くの Tridion プロセス (TcmServiceHost、COM+、Publisher、TcmTemplateDebugHost、IIS アプリケーション プール) に読み込まれ、これらのプロセスは次の可能性があります。
- Tridion にアクセスできる ID の下で実行されます (たとえば、COM+ アプリケーションは、Tridion 管理者である MTSUser の下で実行されます)。
- Tridion へのアクセス権はないが、Tridion ユーザーの偽装が許可されている ID で実行されます (たとえば、TcmServiceHost は、Tridion 偽装ユーザーとして構成された NetworkService として実行されます)。
この 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 であるかどうかという問題ではありません。