2013-03-04 8 views
2

Я пытаюсь вытянуть все роли, назначенные системному пользователю. Я думаю, что мне нужно использовать связанные объекты, но я не уверен, как мне приступить к этому подходу. Вот мой фрагмент кода:Как получить все роли системного пользователя?

Uri organizationUri = new Uri(this.ConnectionString); 
Uri homeRealmUri = null; 
ClientCredentials credentials = new ClientCredentials(); 
credentials.UserName.UserName = ConfigUserName; 
credentials.UserName.Password = ConfigPassword; 

Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy orgProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null); 
IOrganizationService _service = (IOrganizationService)orgProxy; 

Microsoft.Xrm.Sdk.Entity account = new Microsoft.Xrm.Sdk.Entity("systemuser"); 
QueryExpression query = new QueryExpression 
{ 
    EntityName = account.LogicalName, 
    ColumnSet = new ColumnSet(true) 
}; 
DataCollection<Microsoft.Xrm.Sdk.Entity> users = _service.RetrieveMultiple(query).Entities; 

// fetch assigned roles of users 
+0

Помогла ли ссылка с Джеймса? Если да, примите его ответ как ответ. Если нет, сообщите нам, и кто-то опубликует более короткую версию исходного кода для вас. Я знаю, что примеры могут иногда казаться немного подавляющими. :) –

ответ

2

Вот моя реализация тянуть все роли конкретного пользователя

QueryExpression query = new QueryExpression(); 
query.EntityName = "role"; 
query.ColumnSet = new ColumnSet(true); 

LinkEntity role = new LinkEntity(); 
role.LinkFromEntityName = "role"; 
role.LinkFromAttributeName = "roleid"; 
role.LinkToEntityName = "systemuserroles"; 
role.LinkToAttributeName = "roleid"; 

LinkEntity userRoles = new LinkEntity(); 
userRoles.LinkFromEntityName = "systemuserroles"; 
userRoles.LinkFromAttributeName = "systemuserid"; 
userRoles.LinkToEntityName = "systemuser"; 
userRoles.LinkToAttributeName = "systemuserid"; 

ConditionExpression conditionExpression = new ConditionExpression(); 
conditionExpression.AttributeName = "systemuserid"; 
conditionExpression.Operator = ConditionOperator.Equal; 
conditionExpression.Values.Add(userId); 

userRoles.LinkCriteria = new FilterExpression(); 
userRoles.LinkCriteria.Conditions.Add(conditionExpression); 

role.LinkEntities.Add(userRoles); 
query.LinkEntities.Add(role); 

DataCollection<Microsoft.Xrm.Sdk.Entity> userRoles = _service.RetrieveMultiple(query).Entities; 
return userRoles; 
2

Существует образец на MSDN для проверки пользователей ролей безопасности, должны помочь вам закончить это прочь.

Sample: Determine Whether a User has a Role

+0

+1 за то, что он достаточно ленив, чтобы просто добавить ссылку. :) –

+2

Нет точки перепрограммирования, если она уже есть в Интернете. –

2

Следующая Linq запрос с использованием сгенерированных ранних переплете сущностей CRM будет делать то, что вы после:

var query = from user in context.SystemUserSet 
      join userRoles in context.SystemUserRolesSet on user.SystemUserId equals userRoles.SystemUserId 
      join role in context.RoleSet on userRoles.RoleId equals role.RoleId 
      where user.DomainName == '<username>' 
      select role; 

Информация о создании организаций, связанных с ранней структурой, находится здесь: CrmSvcUtil usage

Смежные вопросы