Проверка наличия роли безопасности у текущего пользователя

Пример на C#, показывающий как проверить наличие роли безопасности у пользователя, от имени которого выполняется данный программный код.

using System;
using System.Linq;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace Samples.MsCrm
{
	class Program
	{
		static void Main(string[] args)
		{
			using (var service = new OrganizationService("OnPremisesWindowsIntegrated"))
			{
				var roleName = "Системный администратор";
				var role = GetCurrentUserRile(service, roleName);
				if (role == null)
					Console.WriteLine("Роль с именем \"" + roleName + "\" не найдена для текущего пользователя.");
				else
					Console.WriteLine("У текущего пользователя есть роль с именем \"" + roleName + "\".");
			}

			Console.WriteLine();
			Console.WriteLine("Press any key...");
			Console.ReadKey();
		}


		private static Entity GetCurrentUserRile(IOrganizationService service, string roleName)
		{
			var query = @"
<fetch version='1.0' mapping='logical' distinct='true' no-lock='true'>
<entity name='role' >
<attribute name='roleid' />
<link-entity name='systemuserroles' from='roleid' to='roleid'>
<link-entity name='systemuser' from='systemuserid' to='systemuserid'>
<filter>
<condition attribute='systemuserid' operator='eq-userid' />
</filter>
</link-entity>
</link-entity>
<filter>
<condition attribute='name' operator='eq' value='" + roleName + @"' />
</filter>
</entity>
</fetch>";
			var roles = service.RetrieveMultiple(new FetchExpression(query)).Entities;
			if (roles.Count < 1)
				return null;
			if (roles.Count > 2)
				throw new Exception("Найдено более одной роли с именем \"" + roleName + "\".");
			return roles.First();
		}
	}
}

About the author

Добавить комментарий

Сказать спасибо

Способ платежа:

Подписаться на обновления

Укажите свой e-mail чтобы получать уведомления о новых статьях.

Присоединиться к еще 3 подписчикам