gpt4 book ai didi

tridion - 如何检测我的代码是否应该模拟?

转载 作者:行者123 更新时间:2023-12-02 11:50:25 25 4
gpt4 key购买 nike

我有作为事件处理程序的一部分运行的代码,需要创建一个新的 TOM.NET session (我无法重用 subject.Session)。该事件处理程序被加载到许多 Tridion 进程(TcmServiceHost、COM+、Publisher、TcmTemplateDebugHost、IIS 应用程序池)中,这些进程可能:

  • 在有权访问 Tridion 的身份下运行(例如,COM+ 应用程序在 MTSUser 下运行,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。

最佳答案

我不会使用这个代码。异常捕获速度很慢,并且您当前正在向无法访问系统的任何人授予(管理员)访问权限 - 这是一个很大的安全漏洞。

相反,我会查看当前用户是谁,并确定他是否是模拟用户。如果没有相应的 API(我没有检查过),您可以直接从 Tridion.ContentManager.config 文件中读取模拟用户。

var isImpersonationUser = IsImpersonationUser(WindowsIdentity.GetCurrent());
var session = isImpersonationUser ? new Session("Administrator") : new Session();
var item = session.GetObject(id);

或者您可以为您的事件代码单独配置它。或者甚至是硬编码,如果您不关心代码是否通用。

关于tridion - 如何检测我的代码是否应该模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com