我需要能够让一个用户暂时镜像另一个用户。镜像用户应该获得与目标用户相同的业务单位,团队和角色。现在它是手动完成的,但这很痛苦。我编写了一个自定义工作流活动来执行此操作,如果我以系统管理员身份运行并选择镜像用户和目标用户,它就可以工作。
但最终目标是允许某些用户自己运行对话框。如果我尝试以自己的身份运行它作为镜像用户,我会收到一条错误消息,说我没有权限分配角色,这是有道理的,因为工作流占用了我的角色,然后尝试为我分配目标用户的角色。
我希望工作流活动以特权用户身份运行,但到目前为止还没有任何运气。我尝试像这样创建IOrganizationService
:
var context = executionContext.GetExtension<IWorkflowContext>();
var serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
var service = serviceFactory.CreateOrganizationService(null);
根据使用CreateOrganizationService
调用null
的文档作为参数应该强制系统用户的用户,但它似乎仍然作为主叫用户运行。
我还尝试调用CreateOrganizationService
并使用系统管理员角色传递其他用户的Guid,但结果相同。
答案 0 :(得分:2)
工作流具有特殊条件,旨在忽略您传递给CreateOrganizationService的guid。
我从这个article获取下一段:
对于自动工作流程案例,工作流程的所有者也是 激活它的人以及选择触发机制的人 工作流步骤,如果工作流在该用户下执行,则可以 上下文。对于按需用户,用户特意请求 由工作流程代表他执行的一些操作,以便用户执行 完全了解工作流程定义并将执行; 因此,在该用户的上下文下执行工作流是安全的 而不是工作流所有者(可能不知道用户 请求按需执行。)
答案 1 :(得分:2)