本帖最后由 phoben 于 2021-3-6 21:45 编辑
————————————————————————————————————
兼职活字格开发,欢迎各位大佬联系! VX:13972707111
【功能篇】 在开发应用的过程中,遇到不计其数的困难,在各路大神的帮助下,大部分得以解决,下面就提几个比较刁钻点的难题,抛砖引玉
一、多应用用户访问隔离
场景:同服务器下多个应用可以实现数据隔离,但由于活字格是公用一套用户,所以如何做到用户隔离呢? 解决方法:通过JS代码判断用户身份,继而在网页加载时截断访问 实现步骤:判断当前应用名称——判断用户身份——拦截/放行 难点:如何判断用户身份? 如何获取正确的当前应用名? 如何进行拦截?
- setTimeout(function() {
- //获取当前应用名
- var helper = Forguncy.Helper; //创建活字格API中helper对象
- var url = helper.SpecialPath.getBaseUrl(); //利用Helper方法获取当前URL
- var appname = url.replace(/\//g, ''); //通过正则获取准确应用名
- //获取用户自定义属性
- var page = Forguncy.Page; //
- var userInfo = page.getUserInfo();
- var pagename = page.getPageName();
- var userProperty = userInfo.Properties[0].Value.split(",");
- //业务判断逻辑代码
- if (userProperty.indexOf(appname) <= -1 && userProperty.indexOf("all") <= -1 && pagename != "FGC_登录") {
- alert("你没有权限浏览这个应用");
- window.location.href = appname + "/FGC_登录";
- }
- }, 3000);
复制代码通过后台添加自定义属性,用来区分每个用户所属应用,就能很好的进行应用访问隔离 将上方代码保存,并引入活字格,那么所有页面都具有了判断身份的能力!
二、登陆页面的美化及增加验证码 场景:需要自定义更丰富的登陆页面
解决办法:增加背景美化页面,增加验证码功能确保安全
难点:验证码的实现及登陆代码的替换实现步骤:重写登陆页面JS,并在内部增加对验证码的判断,利用”验证码“插件生成验证码,并通过单元格获取判断! 细节:用单元格判断用户输入的是否和生成的一致,然后在下方JS代码中获取这个判断结果,为真就放行,为假就重输。
- //重写自带登陆页面的JS,需要放在全局JS里;
- var login = Forguncy.UserManagerCommand.prototype.logIn;
- Forguncy.UserManagerCommand.prototype.logIn = function (){
- var result = Forguncy.Page.getCell("result").getValue();
- console.log(result);
- //逻辑代码
- if(result == 1){
- login.apply(this); //登录
- }else{
- Notiflix.Report.Warning( '登陆失败', '验证码错误,请重新输入!', '返回' );
- }
- }
复制代码
三、前台添加用户并设置角色和自定义属性 场景:不给应用用户“管理员”权限,允许在其前台为当前应用添加用户并赋予不同角色 难点:前台添加用户——设置橘色——设置自定义属性,这几个步骤都能找到代码,关键在于代码是异步实现,不能嵌套使用,只能分成2部进行。 解决方法:利用编辑框的命令,判断上一步是否成功,成功才进行下一步; var p = Forguncy.Page; var username = p.getCell("username").getValue(); var userid = p.getCell("userid").getValue(); var role = p.getCell("role").getValue();; var data = { account: username, password:"123456", nicheng: p.getCell("nicheng").getValue(), mail: p.getCell("email").getValue(), exPropertyName1: "appname", exPropertyValue1: p.getCell("appname").getValue(), exPropertyName2: "", exPropertyValue2: "", exPropertyName3: "", exPropertyValue3:"" }; Forguncy.Common.forguncyPostSync("customapi/myregisteapi/adduser", data, function (e) { if (e === "注册成功!") { Forguncy.addUserToRole(username,role,function () { p.getCell("jspd1").setValue(1); }, function (error) { p.getCell("jspd1").setValue(error); } ); }else{ p.getCell("jspd1").setValue(e); } });
将"jspd1"的命令中设置好用户入库的命令和失败后的提示
四、不同用户进入不同页面 场景:针对不同角色,要显示的页面不同; 解决方法:建立公共判断首页,进来后判断角色,相应进行跳转。
五、内部业务消息的通知、已读 场景:内部业务需要进行通知,需要红点显示,并可以设置已读、删除! 难点:通过数据库工作流控制已读 解决方法:建立消息推送数据表,配合工作流进行已读判断。 具体效果可以看另一个帖子:有趣创意小功能分享4:应用内收发消息!
1、简单说就是在工作流中,设置“未读消息”“已读消息”两个状态,当用户点击已读时,设置当前数据工作流为“已读消息”并设置担当者为本人,当用户删除消息时,只需将担当者清空即可。 2、每个用户只能读取担当者为自己的数据。
六:应用锁屏、屏保功能
|