当我想授予 CRM SDK 2015 中的记录 GrantAccess 时,出现此错误 "Support user does not have permission on this operation"

I got this error "Support user does not have permission on this operation" when I want to give GrantAccess to a record in CRM SDK 2015

我遇到了这个异常: "Support user does not have permission on this operation" 当我尝试授予用户访问记录的权限时。这是我的代码:

public void GrantAccess(Guid targetId, Guid principleId)
    {

        using (var service = new OrganizationService(_con))
        {
            var request = new GrantAccessRequest()
            {
                Target = new EntityReference(Account.EntityLogicalName, targetId),
                PrincipalAccess = new PrincipalAccess()
                {
                    AccessMask = AccessRights.ReadAccess,
                    Principal = new EntityReference(principleId.ToString())
                }
            };
            service.Execute(request);
        }
    }

我的 Constr 是这样的:

private static readonly string ConStr = "Url=http://crm.[ourdomain].com:90/Test; Domain=[ourdomain]; Username=[user]; Password=[password];";

我可以读取数据,例如我得到这个方法: 检索共享主体和访问响应 甚至我 "RevokeAccess" 通过 RevokeAccessRequest,但我无法授予访问权限或修改它。

编辑 1 全栈错误:

System.ServiceModel.FaultException`1 was unhandled
  Action=http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/ExecuteOrganizationServiceFaultFault
  HResult=-2146233087
  Message=Support user does not have permission on this operation
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]: 
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at Microsoft.Xrm.Sdk.IOrganizationService.Execute(OrganizationRequest request)
       at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.ExecuteCore(OrganizationRequest request)
       at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Execute(OrganizationRequest request)
       at Microsoft.Xrm.Client.Services.OrganizationService.<>c__DisplayClass19.<Execute>b__18(IOrganizationService s)
       at Microsoft.Xrm.Client.Services.OrganizationService.InnerOrganizationService.UsingService[TResult](Func`2 action)
       at Microsoft.Xrm.Client.Services.OrganizationService.Execute(OrganizationRequest request)
       at CRMConsole.Queries.GrantAccess(Guid targetId, Guid principleId) in D:\Projects\CRM\CRMPrivileges\CRMConsole\Queries.cs:line 142
       at CRMConsole.Program.Main(String[] args) in D:\Projects\CRM\CRMPrivileges\CRMConsole\Program.cs:line 20
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

我检查了用户对帐户实体的访问权限,他具有用户深度的读取权限。除此之外,我可以在 crm 网页 UI 中与连接凭据中的当前用户共享此实体。

这太荒谬了,但问题出在这行代码中:

Principal = new EntityReference(principleId.ToString())

我们必须像这样声明实体名称:

Principal = new EntityReference(SystemUser.EntityLogicalName,principleId)