如何在服务器端获取MS Dynamics CRM中的当前用户权限

我正在研究MS CRM插件,它应该能够确定当前用户是否具有对当前实体的写访问权。 我不知道如何处理这项任务。

目前似乎不支持完成此任务的最用户友好的方式。

除了编写FetchXML查询并解析其输出之外,MS CRM 2011 SDK中是否还有其他选择?

以下是我提出的内容 – 此代码将检查,当前用户是否已授予当前记录的权限:

// Requesting user's access rights to current record var principalAccessRequest = new RetrievePrincipalAccessRequest { Principal = new EntityReference("systemuser", localContext.PluginExecutionContext.UserId), Target = new EntityReference(localContext.PluginExecutionContext.PrimaryEntityName, localContext.PluginExecutionContext.PrimaryEntityId) }; // Response will contain AccessRights mask, like AccessRights.WriteAccess | AccessRights.ReadAccess | ... var principalAccessResponse = (RetrievePrincipalAccessResponse)localContext.OrganizationService.Execute(principalAccessRequest); if ((principalAccessResponse.AccessRights & AccessRights.WriteAccess) != AccessRights.None) { ... ... ... } 

如果用户具有WriteAccess到当前记录,则将执行if语句中的代码。

根据马特的答案:

  1. 检索实体权限
  2. 加入实体roleprivilege,其中privilege.privilegeid = roleprivilege.privilegeid
  3. 加入实体systemuserrole,其中systemuserrole.roleid = roleprivileges.roleid和systemuserrole.systemuserid =(相关用户的GUID)
  4. 然后迭代权限或查找权限,其中privilege.name =“prvReadMyEntityName”

您只需要执行连接并添加您关心的where子句。 这是等效SQL:

 SELECT Privilege.* FROM Privilege INNER JOIN RolePrivilege ON Privilege.PrivilegeId = RolePrivilege.PrivilegeId INNER JOIN SystemUserRole ON SystemUserRole.RoleId = RolePrivileges.RoleId AND SystemUserRole.SystemUserId = (user's GUID) -- WHERE Add whatever constraints on the Privilege entity that you need 

您可以使用Fetch XML,LINQ to CRM或Query Expressions,甚至OData来执行此操作。