我有代码作为事件处理程序的一部分运行,需要创建一个新的TOM.NET会话(我不能重用subject.Session).此事件处理程序加载到许多Tridion进程(TcmServiceHost,COM +,Publisher,TcmTemplateDebugHost,IIS应用程序池)中,这些进程可能:
我尝试用这个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);
...
Run Code Online (Sandbox Code Playgroud)
这是检查我的代码是否在可以访问Tridion的进程下运行的正确方法(忽略我硬编码"Administrator"的事实)?代码有效,但我只是想知道是否有更有效的方法来执行"有权访问Tridion"检查?
注意:当我使用Core Service访问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);
Run Code Online (Sandbox Code Playgroud)
或者您可以为事件代码单独配置它.如果您不关心代码是通用的,甚至是硬编码的.
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |