【主播管理系统开发】功能篇
本帖最后由 phoben 于 2021-3-6 21:45 编辑【主播管理系统开发】主贴地址:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=68048&page=&extra=#pid261425————————————————————————————————————
兼职活字格开发,欢迎各位大佬联系! 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.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、每个用户只能读取担当者为自己的数据。
六:应用锁屏、屏保功能场景:需要临时锁定屏幕,防止误操作,无需退出应用难点:如何防止刷新代码失效,以及锁定后如何防止手动关闭弹窗;解决办法:利用代码判断进行弹窗锁屏,利用代码隐藏弹窗的关闭按钮;具体实现请进入:有趣创意小功能分享2:一键锁定应用网页(屏保)!
:):):)这都是满满的干货,很实用,有DEMO更完美 对,最好demo看一下:) 三、前台添加用户并设置角色和自定义属性这段楼号可以放个DEMO出来看下吗 非常干的干货啊
~ 隔离访问的js保存到活字格的什么地方,设置中的js/css吗
夏雪冬阳 发表于 2019-12-14 21:07
隔离访问的js保存到活字格的什么地方,设置中的js/css吗
对的,全局js
终于激活啦! //业务判断逻辑代码
if (userProperty.indexOf(appname) <= -1 && userProperty.indexOf("all") <= -1 && pagename != "FGC_登录") {
alert("你没有权限浏览这个应用");
window.location.href = appname + "/FGC_登录";
}
这里面的<=-1是从哪来的 夏雪冬阳 发表于 2019-12-15 15:25
//业务判断逻辑代码
if (userProperty.indexOf(appname)
这个语句的意思是查找一个内容,如果返回-1以下的就说明找不到,大于-1的就是找到具体位置