我有一个针对Account
实体注册的插件,Assign
消息,Post-Operation (stage 40)
,必须对相关记录执行一些魔术。
我在ADMINISTRATOR
下注册了指定Run in User's Context
的步骤,因为魔术需要比用户更多的权限:模仿管理员似乎是正确的行动方式。
如果我继续尝试使用"普通"用户(让我们称之为TESTUSER
),我发现模仿似乎没有"坚持"。
假设用户看起来像这样:
ADMINISTRATOR - guid AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
TESTUSER - guid FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
这是我在调试插件执行时看到的:
PluginExecutionContext.UserId -> FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
PluginExecutionContext.InitiatingUserId -> FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
插件反过来抱怨带有guid FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF的用户缺少一些特权(这是真的,这正是我设置步骤在不同用户中运行的原因&# 39; s上下文,谁拥有这些特权并且应该负责所执行的操作)
我认为如果我将Run in user context
设置为Calling User
之外的其他内容,那么该插件会冒充其他用户,我错了吗?
我没有包含任何源代码,因为我不相信它的相关性(该插件正在运行,直到由于缺少权限而导致其崩溃,因为它正在运行在错误的用户下......)
答案 0 :(得分:1)
作为在插件注册工具中指定用户的替代方法,您可以像下面的行一样创建新的服务实例,并使用它来执行需要完全权限的操作:
IOrganizationService adminservice = serviceFactory.CreateOrganizationService(null);
对adminservice方法的所有调用都将以具有管理员权限的SystemUser执行。