2013-04-16 5 views
5

मैं एमएस सीआरएम प्लगइन पर काम कर रहा हूं, और यह निर्धारित करने में सक्षम होना चाहिए कि मौजूदा उपयोगकर्ता को वर्तमान इकाई तक पहुंच है या नहीं। मुझे नहीं पता कि इस कार्य को कैसे पहुंचाया जाए।सर्वर पक्ष पर एमएस डायनेमिक्स सीआरएम में वर्तमान उपयोगकर्ता विशेषाधिकार कैसे प्राप्त करें

ऐसा लगता है कि इस उपयोगकर्ता को पूरा करने वाला सबसे उपयोगकर्ता-अनुकूल तरीका वर्तमान में unsupported है।

क्या एमएस सीआरएम 2011 एसडीके में कोई विकल्प है, FetchXML क्वेरी लिखने और इसके आउटपुट को पार्स करने के अलावा?

उत्तर

9

यहाँ है कि मैं क्या के साथ आए हैं, इस कोड की जाँच करेगा वर्तमान उपयोगकर्ता मौजूदा रिकॉर्ड पर विशेषाधिकार दिया है करता है ।

-1

this देखें।

यह का सार है:

//Check if user is connected for on-prem or hosted 

Guid userGuid; 
if(Request.LogonUserIdentity.IsAuthenticated == true) 
{ 
    WhoAmIRequest userRequest = new Microsoft.Crm.SdkTypeProxy.WhoAmIRequest(); 
    WhoAmIResponse user = (Microsoft.Crm.SdkTypeProxy.WhoAmIResponse)objCrmService.Execute (userRequest); 
    userGuid = user.UserId; 
} 
else //ifd 
{ 
    userGuid = new Guid(Context.User.Identity.Name); 
} 
+3

यह मूल उपयोगकर्ता जानकारी देता है, न कि उनके विशेषाधिकार – Daryl

+0

अच्छा बिंदु @Daryl – Bvrce

1
मैट जवाब के अनुसार

:

  1. इकाई विशेषाधिकार
  2. इकाई roleprivilege पर शामिल हों पर पुन: प्राप्त करें जहां privilege.privilegeid = roleprivilege.privilegeid
  3. इकाई systemuserrole पर शामिल हों जहां systemuserrole.roleid = roleprivileges.roleid और systemuserrole.systemuserid = (प्रश्न में उपयोगकर्ता की GUID)
  4. तो या तो विशेषाधिकार के माध्यम से पुनरावृति या विशेषाधिकार के लिए देखने के लिए जहां privilege.name = "prvReadMyEntityName"

तुम बस मिलती करते हैं और जोड़ने के लिए है आप जिस खंड की परवाह करते हैं। इस सीआरएम, या क्वेरी भाव, या यहाँ तक OData को XML, या LINQ में लाएं का उपयोग

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 

आप प्रदर्शन कर सकते हैं: यहाँ समतुल्य एसक्यूएल है।

// 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) 
{ 
    ... 
    ... 
    ... 
} 

if बयान के अंदर कोड उपयोगकर्ता मौजूदा रिकॉर्ड को WriteAccess है अगर निष्पादित किया जाएगा: -

+0

मुझे और अधिक शानदार तरीका मिला है: http://stackoverflow.com/a/16042098/1047741 – shytikov

संबंधित मुद्दे