找回密码
 立即注册

QQ登录

只需一步,快速开始

phoben 讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2019-11-21 14:58  /   查看:13664  /  回复:22
本帖最后由 phoben 于 2021-3-6 21:45 编辑


————————————————————————————————————
兼职活字格开发,欢迎各位大佬联系! VX:13972707111


【功能篇】
在开发应用的过程中,遇到不计其数的困难,在各路大神的帮助下,大部分得以解决,下面就提几个比较刁钻点的难题,抛砖引玉

一、多应用用户访问隔离

场景:同服务器下多个应用可以实现数据隔离,但由于活字格是公用一套用户,所以如何做到用户隔离呢?
解决方法:通过JS代码判断用户身份,继而在网页加载时截断访问
实现步骤:判断当前应用名称——判断用户身份——拦截/放行
难点:如何判断用户身份?  如何获取正确的当前应用名? 如何进行拦截?

以下代码得到了"谢厅"大哥的帮助,再次感谢!!!
  1. setTimeout(function() {
  2.     //获取当前应用名
  3.     var helper = Forguncy.Helper; //创建活字格API中helper对象
  4.     var url = helper.SpecialPath.getBaseUrl(); //利用Helper方法获取当前URL
  5.     var appname = url.replace(/\//g, ''); //通过正则获取准确应用名
  6.     //获取用户自定义属性
  7.     var page = Forguncy.Page; //
  8.     var userInfo = page.getUserInfo();
  9.     var pagename = page.getPageName();
  10.     var userProperty = userInfo.Properties[0].Value.split(",");
  11.     //业务判断逻辑代码
  12.     if (userProperty.indexOf(appname) <= -1 && userProperty.indexOf("all") <= -1 && pagename != "FGC_登录") {
  13.         alert("你没有权限浏览这个应用");
  14.         window.location.href = appname + "/FGC_登录";
  15.     }
  16. }, 3000);
复制代码
通过后台添加自定义属性,用来区分每个用户所属应用,就能很好的进行应用访问隔离
将上方代码保存,并引入活字格,那么所有页面都具有了判断身份的能力!

二、登陆页面的美化及增加验证码
场景:需要自定义更丰富的登陆页面
解决办法:增加背景美化页面,增加验证码功能确保安全
难点:验证码的实现及登陆代码的替换
实现步骤:重写登陆页面JS,并在内部增加对验证码的判断,利用”验证码“插件生成验证码,并通过单元格获取判断!
细节:用单元格判断用户输入的是否和生成的一致,然后在下方JS代码中获取这个判断结果,为真就放行,为假就重输。
image.png163599852.png
  1. //重写自带登陆页面的JS,需要放在全局JS里;
  2. var login = Forguncy.UserManagerCommand.prototype.logIn;
  3. Forguncy.UserManagerCommand.prototype.logIn = function (){
  4.       var result = Forguncy.Page.getCell("result").getValue();
  5.       console.log(result);
  6.       //逻辑代码
  7.       if(result == 1){
  8.             login.apply(this); //登录
  9.       }else{
  10. Notiflix.Report.Warning( '登陆失败', '验证码错误,请重新输入!', '返回' );
  11. }
  12. }
复制代码

三、前台添加用户并设置角色和自定义属性
场景:不给应用用户“管理员”权限,允许在其前台为当前应用添加用户并赋予不同角色
难点:前台添加用户——设置橘色——设置自定义属性,这几个步骤都能找到代码,关键在于代码是异步实现,不能嵌套使用,只能分成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"的命令中设置好用户入库的命令和失败后的提示
image.png501616210.png


四、不同用户进入不同页面
场景:针对不同角色,要显示的页面不同;
解决方法:建立公共判断首页,进来后判断角色,相应进行跳转。
image.png894649352.png


五、内部业务消息的通知、已读
场景:内部业务需要进行通知,需要红点显示,并可以设置已读、删除!
难点:通过数据库工作流控制已读
解决方法:建立消息推送数据表,配合工作流进行已读判断。
具体效果可以看另一个帖子:有趣创意小功能分享4:应用内收发消息!
image.png404453124.png
image.png539351500.png
image.png327441710.png
1、简单说就是在工作流中,设置“未读消息”“已读消息”两个状态,当用户点击已读时,设置当前数据工作流为“已读消息”并设置担当者为本人,当用户删除消息时,只需将担当者清空即可。
2、每个用户只能读取担当者为自己的数据。


六:应用锁屏、屏保功能
场景:需要临时锁定屏幕,防止误操作,无需退出应用
难点:如何防止刷新代码失效,以及锁定后如何防止手动关闭弹窗;
解决办法:利用代码判断进行弹窗锁屏,利用代码隐藏弹窗的关闭按钮;
具体实现请进入:有趣创意小功能分享2:一键锁定应用网页(屏保)!


image.png520921935.png
image.png223450621.png

评分

参与人数 1金币 +2000 收起 理由
Simon.hu + 2000 赞一个!

查看全部评分

22 个回复

倒序浏览
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
5#
非常干的干货啊
~
回复 使用道具 举报
夏雪冬阳
论坛元老   /  发表于:2019-12-14 21:07:16
6#
隔离访问的js保存到活字格的什么地方,设置中的js/css吗
回复 使用道具 举报
phoben讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2019-12-14 21:59:07
7#
夏雪冬阳 发表于 2019-12-14 21:07
隔离访问的js保存到活字格的什么地方,设置中的js/css吗

对的,全局js
回复 使用道具 举报
cadbn
注册会员   /  发表于:2019-12-15 02:43:58
8#
终于激活啦!
回复 使用道具 举报
夏雪冬阳
论坛元老   /  发表于:2019-12-15 15:25:04
9#
//业务判断逻辑代码
    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
10#
夏雪冬阳 发表于 2019-12-15 15:25
//业务判断逻辑代码
    if (userProperty.indexOf(appname)

这个语句的意思是查找一个内容,如果返回-1以下的就说明找不到,大于-1的就是找到具体位置
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部