We were previously using an unsupported dll (Microsoft.Crm.Application.Components.Core
) to check if the current user in Dynamics has read privileges on a specific entity:
Microsof开发者_如何学Ct.Crm.Security.User.HasPrivilege(Microsoft.Crm.Security.User.Current,
"myentityname, AccessRights.ReadAccess);
I need to do the same thing using only the supported SDK (and the CrmService).
Can someone advise on how to accomplish this using the SDK?
Try with this:
<fetch mapping="logical" count="1000" version="1.0">
<entity name="privilege">
<attribute name="name" />
<filter>
<condition attribute="name" operator="eq" value="prvCreateINSERTYOURENTITYHERE" />
</filter>
<link-entity name="roleprivileges" from="privilegeid" to="privilegeid">
<link-entity name="role" from="roleid" to="roleid">
<link-entity name="systemuserroles" from="roleid" to="roleid">
<link-entity name="systemuser" from="systemuserid" to="systemuserid">
<filter>
<condition attribute="fullname" operator="eq" value="INSERT NAME HERE" />
</filter>
</link-entity>
</link-entity>
</link-entity>
</link-entity>
</entity>
</fetch>
You can probably design a Fetch or QueryExpression like so:
- Retrieve on the entity privilege
- Join on entity roleprivilege where privilege.privilegeid = roleprivilege.privilegeid
- Join on entity systemuserrole where systemuserrole.roleid = roleprivileges.roleid and systemuserrole.systemuserid = (GUID of the user in question)
- Then either iterate through the privileges or look for privilege where privilege.name = "prvReadMyEntityName"
Just be careful on the results, because you may get different privilege depths from different roles, but if you don't care about the depth then I think that'll do it.
精彩评论