"Support user does not have permission on this operation"我想向CRM SDK 2015中的记录授予访问权限时,我收到此错误



我得到了这个例外:"支持用户对此操作没有许可"当我尝试访问用户记录时。这是我的代码:

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);
        }
    }

我的约束就像:

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

i Cand读取数据,例如我得到此方法:retieveshared principalsandAccessResponse我还可以通过revokeAccessRequest" revokeAccess",但我无法授予访问或修改。

edit1 完整堆栈错误:

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:ProjectsCRMCRMPrivilegesCRMConsoleQueries.cs:line 142
       at CRMConsole.Program.Main(String[] args) in D:ProjectsCRMCRMPrivilegesCRMConsoleProgram.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)

最新更新