【原】关于授权的那些事儿
in 随笔 with 0 comment

【原】关于授权的那些事儿

in 随笔 with 0 comment

没有人不爱惜他的生命,但很少人珍视他的时间。 --梁实秋


写了几天纯代码的东西,也分享了不少代码片段,今天不打算聊技术了,那就聊一聊设计吧。

有人说程序不需要设计,需求都是策划给的。如果你也这么认为,那就错了~其实我们程序员,也可以叫做设计师吧,毕竟计算机是一个很死板的东西,我们要让计算机实现我们想要达到的目的,就必须学会设计程序,给计算机安排一个合理,稳定,高效的运行逻辑,运作流程。

场景:第一用户想要实现一个高危操作,需要获得高级管理员授权。(PHP Web实现)

其实这样的场景我们很常见,比如我在银行销卡,会发现,操作员会叫来大堂经理或者领班帮忙进行一次指纹认证,才可以继续往下操作,当然,银行系统并不是BS设计,也不会是PHP写底层。不过其实程序的整体流程是一致的。

首先我大脑中出现的第一个方案是:

A请求 => 锁定界面等待B授权 => B授权 => 继续操作

方案一的流程无疑是最简单的,也是最直白的,但是其严格规定了A和B在同一个地方才可以,而往往我们是做不到这样的,甚至,A和B都有可能不在一个城市,方案一显然不可行的。

方案二:

A请求 => 发出授权申请 => A锁定界面 => A告知B有授权的需求 => B刷新页面 => B完成授权 => A刷新页面跳转

但是web有个最大的问题就是,不能做到完全锁定页面,用户可以随意的关闭,刷新页面,这是一个非常不可控的过程。同时,口头的信息传递难免也是有误差的。方案二依旧被否了。

方案三:

A请求 => 发出授权申请 => A完事 => A告知B有授权的需求 => B刷新页面 => B完成授权 => B跳转目标URL帮A继续后续的工作

这个方案解决了因为无法完全锁定操作而带来的一系列问题,但是口头传递信息存在误差这个不稳定因素还是存在,所以依旧被否了。

这种情况下,我们应该直接出方案四了,但是有个问题!我们要想做到机器传递信息,那么必然需要服务器主动向客户端发送数据,但是HTTP显然做不到。为此我加入的webSocket。 请参看 这样方案四产生了。

方案四:

A请求 => 发出授权申请 => A完事 => 系统通过WebSocket将信息传递给B => B刷新页面 => B完成授权 => B跳转目标URL帮A继续后续的工作

最后说两句,虽然可以基本实现我们想要的目的,但是我并没有说,最终的方案四就是一个终极版本,其实我们还有很大的提升空间,甚至,我们可以脱离PHP和HTTP,我们以别的形式去实现这样的需求。所以,用一个设计师的角度去看程序,其实是一个很锻炼思维的方式。小伙子,你还在埋头苦干么?不如,抬头思考思考!!!

Comments are closed.