Не отображается маскировка номеров кредитных карт и отображение их для исправления зарегистрированного пользователя

#javascript #regex #security #dynamics-crm #customization

#javascript #регулярное выражение #Безопасность #динамика-crm #настройка

Вопрос:

Я написал простую функцию javascript, которая будет маскировать все цифры номеров кредитных карт, кроме последних четырех цифр для входа в систему агента, и для любого другого входа (администратор / менеджер) он будет отображать все цифры кредитной карты (12) без маскировки.

Здесь я сталкиваюсь с двумя проблемами: одна — это маскировка для всех, независимо от входа в систему агента или менеджера. Еще один: маскировка такова, что последние четыре цифры отображаются спереди, а остальные отображаются в виде полного пустого места, для лучшего понимания я предоставляю как код, так и скриншот маскировки.

 // JavaScript source code
function RetrieveLoggedInD365UserSecurityRoles(executionContext) {

var roleName = "Agent";
//will retrieve the credit Card Number from the form
var formContext = executionContext.getFormContext();
var creditCardNum = formContext.getAttribute("cts_creditcardnumber").getValue();
var duplicatecreditCardNum = creditCardNum;
//
//to retrive the global user context from the d365 security profile
var globalContext = Xrm.Utility.getGlobalContext();
var userRoles = globalContext.userSettings.roles;

//using regex it will mask the digits of credit card Numbers
userRoles.forEach(function hasRoleName(item) {
if (item.name == roleName) {
alert("i m in!!")
var replacedCreditCardNum = creditCardNum.replace(/d(?=d{4})/g, "x");
formContext.getAttribute("cts_creditcardnumber").setValue(replacedCreditCardNum);
};
if (item.name != rolename) {
formContext.getAttribute("cts_creditcardnumber").setValue(duplicatecreditCardNum);
};

}
);

}  

Он должен был отображаться как «xxxxx-xxxx-0123» и его маскировка для всех логинов, независимо от агента или администратора

введите описание изображения здесь

Комментарии:

1. вы не можете сохранить номер кредитной карты в виде обычного текста, потому что любой пользователь, имеющий доступ к этому полю, может увидеть значение из расширенного поиска, потому что JS для маскировки номера не будет выполняться там. Я не буду комментировать другие несколько причин, по которым хранение номера кредитной карты в виде обычного текста является неправильным.

2. есть дополнительные вопросы?

Ответ №1:

В вашем коде есть недостаток — оба if оператора будут выполняться для каждой роли и переключать маскировку, поэтому поведение сбивает вас с толку.

У вас должен быть флаг и по умолчанию для него значение false, затем повторите и проверьте — только когда в списке пользовательских ролей будет возвращена необходимая роль — вы должны установить флаг как true.

Затем, основываясь на флаге, вы должны замаскировать / демаскировать его.

(Хотя это должно было быть сделано на самой стороне сервера, поскольку безопасность на уровне поля не может быть выполнена для частичной маскировки, а не на стороне клиента, как наилучшая практика, чтобы избежать раскрытия в коде на стороне клиента, возможно, извлечение / извлечение нескольких плагинов является вариантом за счет влияния на производительность)

 var userHasAccess = false;

userRoles.forEach(function hasRoleName(item) {
    if (item.name == roleName) {
        alert("I'm in!!")
        userHasAccess = true;
    };
});

if(userHasAccess == false){
    var replacedCreditCardNum = creditCardNum.replace(/d(?=d{4})/g, "x");
    formContext.getAttribute("cts_creditcardnumber").setValue(replacedCreditCardNum);
}
else{
    formContext.getAttribute("cts_creditcardnumber").setValue(duplicatecreditCardNum);
}
  

Для регулярного выражения нам нужен какой-нибудь онлайн-тестер, чтобы увидеть его в действии.

Комментарии:

1. извините, что я такой наивный, я должен был немного изучить, а затем опубликовать этот вопрос, хотя кажется, что мой скрипт работает нормально в отношении ролей, единственное, что мне нужно, это правильно развернуть веб-ресурсы, хотя, перейдя ко второму запросу, я попробовал тестер регулярных выражений для своей маскировки, и он работалхорошо, но dynamics не поддерживает символы ‘x’ перед моими последними четырьмя кредитами, и он по-прежнему отображается, как изображение, которое я опубликовал выше.

2. Переходя к части безопасности, вы правы, даже я поднял тот же флаг, хотя требования были чем-то другим, его можно было бы легко развернуть с помощью плагина в целях безопасности

3. @subhajitseal вы должны иметь возможность отлаживать панель инструментов разработчика браузера (F12) для устранения неполадок .. вы пробовали? Также мы не хотим устанавливать значение в базе данных, а просто презентацию — поэтому вам следует попробовать веб-ресурс или pcf control .. или просто сохранить два атрибута — один для администратора и один для агента (маскируется в самой БД) — и скрыть / показать на основе формы / элемента управления