Javascript 屏蔽信用卡号并将其显示给正确登录的人是不显示的
我已经编写了一个简单的javascript函数,它将屏蔽所有信用卡号码数字,除了代理登录的最后四位数字,对于任何其他登录(管理员/经理),它将显示所有信用卡号码 无屏蔽的数字(12) 我在这里面临两个问题:一个是屏蔽所有人,无论他们是代理还是经理登录。另一个:掩蔽是这样的,最后四个数字显示在前面,剩下的是一个完整的空白区域,为了更好地理解,我提供了掩蔽的代码和屏幕截图Javascript 屏蔽信用卡号并将其显示给正确登录的人是不显示的,javascript,regex,security,dynamics-crm,customization,Javascript,Regex,Security,Dynamics Crm,Customization,我已经编写了一个简单的javascript函数,它将屏蔽所有信用卡号码数字,除了代理登录的最后四位数字,对于任何其他登录(管理员/经理),它将显示所有信用卡号码 无屏蔽的数字(12) 我在这里面临两个问题:一个是屏蔽所有人,无论他们是代理还是经理登录。另一个:掩蔽是这样的,最后四个数字显示在前面,剩下的是一个完整的空白区域,为了更好地理解,我提供了掩蔽的代码和屏幕截图 //JavaScript源代码 函数RetrievelogeDind365UserSecurityRoles(executio
//JavaScript源代码
函数RetrievelogeDind365UserSecurityRoles(executionContext){
var roleName=“代理”;
//将从表单中检索信用卡号
var formContext=executionContext.getFormContext();
var creditCardNum=formContext.getAttribute(“cts_creditcardname”).getValue();
var duplicatecreditCardNum=creditCardNum;
//
//从d365安全配置文件检索全局用户上下文
var globalContext=Xrm.Utility.getGlobalContext();
var userRoles=globalContext.userSettings.roles;
//使用正则表达式,它将屏蔽信用卡号码的数字
userRoles.forEach(函数hasRoleName(项){
如果(item.name==roleName){
警惕(“我在!!”)
var replacedcreditcardum=creditCardNum.replace(/\d(?=\d{4})/g,“x”);
formContext.getAttribute(“cts_creditcardnumber”).setValue(replacedCreditCardNum);
};
如果(item.name!=rolename){
formContext.getAttribute(“cts_creditcardnumber”).setValue(duplicatecreditCardNum);
};
}
);
}
您的代码有一个缺陷-两个if
语句都会在每个角色上执行并切换掩蔽,这就是该行为让您感到困惑的原因
您应该有一个标志并将其默认为false,然后迭代并检查-只有在用户角色列表中返回必要的角色时-您才应该将该标志设置为true
然后根据标志,您应该屏蔽/取消屏蔽它
(虽然这应该在服务器端本身完成,因为字段级安全不能用于部分屏蔽,而不是作为避免暴露在客户端代码中的最佳实践在客户端完成,但可能检索/检索多个插件是一种以性能影响为代价的选项)
对于regex,我们有些人会看到它在起作用。很抱歉这么幼稚,我应该研究一下,然后应该发布这个问题。虽然我的脚本在角色方面似乎运行良好,但我唯一需要的是正确部署web资源,虽然在第二个问题中,我尝试了regex tester进行掩蔽,它工作正常,但dynamics在我的最后四个学分之前不支持“x”字符,它仍然像我上面发布的图像一样显示。在安全部分,你是对的,即使我举了相同的标志,尽管要求是其他的,为了安全起见,它可以通过插件轻松部署purpose@subhajitseal您应该能够在浏览器开发工具栏(F12)中调试以进行故障排除。。你试过了吗?此外,我们不希望在数据库中设置值,而只是一个演示文稿-因此您应该尝试web资源或pcf控件。。或者简单地保留两个属性——一个用于admin,一个用于agent(在db中屏蔽)——并根据表单/控件隐藏/显示您不能以纯文本形式存储信用卡号,因为任何访问该字段的用户都可以从advanced find中看到值,因为屏蔽该号码的JS不会在那里执行。我不会评论为什么以纯文本形式存储信用卡号是错误的其他几个原因。有后续问题吗?
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);
}