Разработка
17
Янв
0

Обход защиты Field Level Security в плагине

Если плагин выполняется на стадии Pre и изменяет объект Target, который является входными для основной стадии работы плагина, то не имеет значения, есть ли у пользователя, который инициировал работу плагина, права на изменение защищенного поля — плагин все равно будет в состоянии изменить значение поля в объекта Target и «скормить» его основной стадии. Также не имеет значения контекст, в котором плагин был зарегистрирован.

В следующем примере происходит изменение значение поля new_sec в объекте «Target». При этом для поля new_sec была включена безопасность на уровне полей, а плагин был выполнен пользователем, который не имел права на изменение этого поля.

using System;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;

namespace protected1
{
    public class MyPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            try
            {
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                Entity entity = (Entity)context.InputParameters["Target"];
                entity["new_sec"] = "1234";
            }
            catch (FaultException<OrganizationServiceFault> ex)
            {
                throw new InvalidPluginExecutionException("Ошибка: ", ex);
            }
        }
    }
}



Комментарии (0)

*

code