Вроде так! =)
//определяем сервис необходимый для работы с обьектами CRM
CrmService service = newCrmService();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
//определяем текущего пользователя
WhoAmIRequest userRequest = newWhoAmIRequest();
WhoAmIResponse user = (WhoAmIResponse)service.Execute(userRequest);
//
QueryExpression RoleQuery = newQueryExpression();
RoleQuery.ColumnSet = newAllColumns();
RoleQuery.EntityName = "role";
ConditionExpression RoleCondition = newConditionExpression();
RoleCondition.AttributeName = "systemuserid";
RoleCondition.Operator = ConditionOperator.Equal;
RoleCondition.Values = newobject[] { user.UserId };
LinkEntity le = newLinkEntity();
le.LinkFromEntityName = "role";
le.LinkFromAttributeName = "roleid";
le.LinkToEntityName = "systemuserroles";
le.LinkToAttributeName = "roleid";
LinkEntity le2 = newLinkEntity();
le2.LinkFromEntityName = "systemuserroles";
le2.LinkFromAttributeName = "systemuserid";
le2.LinkToEntityName = "systemuser";
le2.LinkToAttributeName = "systemuserid";
le2.LinkCriteria = newFilterExpression();
le2.LinkCriteria.Conditions = newConditionExpression[] { RoleCondition };
le.LinkEntities = newLinkEntity[] { le2 };
RoleQuery.LinkEntities = newLinkEntity[] { le };
BusinessEntityCollection roleCollection = service.RetrieveMultiple(RoleQuery);
bool ManagerRole = false;
bool AdminRole = false;
foreach (BusinessEntity rol in roleCollection.BusinessEntities)
{
if (((role)rol).name == 'Менеджер')
{ ManagerRole = true; }
if (((role)rol).name == 'Системный администратор')
{ AdminRole = true; }
}
этот код тащит все роли, а потом в цикле определяется какие роли у юзера есть из интересующих(это удобно когда надо определить узверга на причастиность к нескольким ролям), а если надо проверить на причастность к одной роли, то просто надо дописать ещё один Condition и проверять возврашаемую ретрайвом коллекцию на не пустоту! В SDK есть пример, я от туда брал в своё время!
|