【问题标题】:Impersonate and change CRM 2011 Access Right模拟和更改 CRM 2011 访问权限
【发布时间】:2013-09-30 21:37:09
【问题描述】:

我有一个场景,我需要更改用户根本无权访问的实体的某些字段。我想知道是否有某种方法可以在我的插件业务逻辑运行的那一刻增加调用用户权限来更新实体的权限,然后我将其从他那里取出。

访问权限员工:根本没有帐户访问权限(Bryan 当前的访问权限)。 访问权限管理员:有权更新帐户。

场景:每次“Bryan”创建机会时,都会在创建机会时运行一个插件,该插件会在系统的整个帐户中增加一个名为 new_count 的字段。 (我知道这个场景很愚蠢,没有任何意义,但无论如何)。所以我们在创建线索时放置了一个插件。 Bryan 创建了一个潜在客户,在插件中我添加了他的访问权限与 Manager 只是为了运行插件,更新后我将其从他那里拿走。

我说清楚了吗?如果是这样,我希望得到一个答案!

谢谢

【问题讨论】:

    标签: c# dynamics-crm-2011 crm


    【解决方案1】:

    你有两个选择

    1. 在插件注册工具中,注册您的插件以在系统用户上下文中运行

    2. 或者在插件中,创建用户ID为null的Web服务。

    IOrganizationService adminservice = serviceFactory.CreateOrganizationService(null);

    adminservice 方法的所有调用都将作为具有管理员权限的 SystemUser 执行,因此无论当前用户权限如何,您都可以更新任何实体上的任何字段。

    【讨论】:

    • 为明确起见,您也可以在插件中多次调用CreateOrganizationService,这样您就可以在以用户身份运行时完成大部分工作,并且只为那些提升到系统用户需要它的部分。
    • 我明白了,我无法与其他用户一起运行插件,因为如果这样,“修改者”字段将失去其真正的价值,即触发插件的用户。
    • “modified by”将包含SYSTEM,但原始用户名将保存在“modified by (delegate)”字段中,以便在需要时访问信息。
    【解决方案2】:

    我终于找到了解决问题的方法。

    要正确完成,我必须执行以下步骤。

    1. 我创建了两个服务: IOrganizationService administratorService = serviceFactory.CreateOrganizationService(null);(感谢 MarioZG);

    IOrganizationService 服务 = serviceFactory.CreateOrganizationService(context.UserId);

    1. 创建具有管理员权限的团队

    2. 在使用“administratorService”的插件开始时,我将调用用户分配给该团队。

    3. 我使用调用用户做任何我想做的事(使用我的 IOrganizationService 命名服务)。

    4. 最后我从团队中挑选了用户。

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多