phoben 发表于 2019-11-21 14:58:11

【主播管理系统开发】功能篇

本帖最后由 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:一键锁定应用网页(屏保)!

djs521720 发表于 2019-11-22 08:16:43

:):):)这都是满满的干货,很实用,有DEMO更完美

unimaallan 发表于 2019-11-22 09:01:27

对,最好demo看一下:)

xgh2019 发表于 2019-11-26 14:47:01

三、前台添加用户并设置角色和自定义属性这段楼号可以放个DEMO出来看下吗

Simon.hu 发表于 2019-12-9 13:51:19

非常干的干货啊
~

夏雪冬阳 发表于 2019-12-14 21:07:16

隔离访问的js保存到活字格的什么地方,设置中的js/css吗

phoben 发表于 2019-12-14 21:59:07

夏雪冬阳 发表于 2019-12-14 21:07
隔离访问的js保存到活字格的什么地方,设置中的js/css吗

对的,全局js

cadbn 发表于 2019-12-15 02:43:58

终于激活啦!

夏雪冬阳 发表于 2019-12-15 15:25:04

//业务判断逻辑代码
    if (userProperty.indexOf(appname) <= -1 && userProperty.indexOf("all") <= -1 && pagename != "FGC_登录") {
      alert("你没有权限浏览这个应用");
      window.location.href = appname + "/FGC_登录";
    }
这里面的<=-1是从哪来的

phoben 发表于 2019-12-15 16:04:12

夏雪冬阳 发表于 2019-12-15 15:25
//业务判断逻辑代码
    if (userProperty.indexOf(appname)

这个语句的意思是查找一个内容,如果返回-1以下的就说明找不到,大于-1的就是找到具体位置
页: [1] 2 3
查看完整版本: 【主播管理系统开发】功能篇