开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:详细设计-权限的校验】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15935
详细设计-权限的校验
内容介绍:
一、需求分析的产出物
二、设计步骤和设计过程
三、校权限
一、需求分析的产出物
主要做的就是关于权限部分的详细设计。大家知道详细设计的起源就是 API 和 ER 图, API 是输入, ER 图是资源;即在 ER 图上完成整个系统的设计。
所以,上述两个东西是前端的需求分析的最主要的两个产出物;即需求分析最
后做出来的东西除了 API 和 ER 图以外,还有界面和报表的设计。
所以界面和报表的设计、 ER 图和 API ,是做完整个需求分析以后,得到的三个东西,它的顺序为: ER 图;界面设计; API 。
大家会发现在做 API 的时候会一直改动 ER 图,因为做 API 的过程中就会发现 ER 图的一些问题;做界面也会发现 ER 图的一些问题,但是今天省略了做报表和界面的过程。虽然将过程省略掉,但是对于后端设计的两个重要的产出物是在第一阶段就已经完成的。给大家的标准就是需求分析的两个重要的产出物,将它们作为大家设计和实现的一个标准。
二、 设计步骤和设计过程
基于这两个东西,就可以开始做详细设计。详细设计的 API ,在标准版的 API 中将权限部分的 API 打开。下图是权限部分所有的 API 。
对于设计而言,一定是先后的过程。在诸多的 API 中,需要挑选一个简单的入手;上节课有同学说从注册用户开始,先有用户才会有其他的;所以先做注册用户,再
做新建权限、新建角色,将用户和角色关联起来,之后在做其他的东西。
这么做的问题就是,该系统最关键的功能是校权限;发现校权限时出了问题,即可能是 ER 图数据错误,也可能是需要进行修改;所造成的结果是之前的数据不可用。
所以从简单的东西开始着手,就会面临这样的风险;因为在整个系统之间,最不确定的部分不是注册用户、新建角色、新建权限、用户和角色的关系、角色和权限的
关系,因为它们没有不确定因素;从基础上而言,它们也没有困难的地方。
所以大家要从确定的地方着手去做,但是大家会发现问题就出在这里:如果先做确定的东西,做完之后做不确定的东西时,发现出了问题后确定的东西就会被浪费掉。
所以从系统的先后顺序上来讲,课本上是从最简单的不依赖于其他功能的地方开始,做完最简单的不依赖于其他东西的功能,再做依赖于它的功能,这样做的好处是便于系统进行一步一步的测试,但它的前提是自己已经将设计想的非常非常清楚、没有问题,就可以由简单到困难,由单个的最不依赖于别人的功能开始到依赖于别人的功能,比如注册用户,它是最不依赖于其他东西的功能;包括新建的权
限、角色,从不依赖于其他东西的功能开始逐步往上做。
假设所有的设计都已经清楚、没有问题,但是如果设计没有存在的不确定因素,这样做也存在问题。
实际上,大部分设计的不确定性是主要的,即设计并不是一个确定性的工作;换句话说,大家一起做权限系统,就需要把设计做的确定,但是大家也没有办法在一开始就把所有的设计全部确定下来,即会做三次极限编程日,可以确定的是第一次极限编程日做什么;第一次极限编程日做完之后才可以确定第二次极限编程日做什么;因为第一次极限编程日做完之后会发现有问题(做软件开发一定会发现做的中间是有问题的),有了问题就需要去解决问题或和更正问题;也有可能是第一次极限编程日,大家做完设计、写完代码之后发现后面不能采用,就会被废弃掉。当然,大家要努力避免该情况出现,它的解决方案是挑最难的做;即在该权限系统中
间,最难的、最具有业务价值的部分是校权限。
因为前面的整个数据结构都是为了校权限而存在,所以要在极限编程日之前把校权限做完;也就是说今天的课完成它的初步设计,下次课看它的实现和测试,把校权限该部分做完。校权限部分做完之后,才会减少在极限编程日的不确定性;所以是在这节课把最难的部分做完以后,确定下节课要做什么的过程。
三、 校权限
所以,今天首要做的事情就是校权限。会发现权限部分所有的 API 中没有一个是校权限的,意味着校权限不会调 API ,它的原因是调 API 太慢。所以,校权限部分在整体的结构上是在前面的网关(整体的系统结构图)的地方进行校权限的;即一个用户进入以后,网关做的第一个事情是认证用户是谁,第二件事情是认证用户是否可以访问当前的 API ,如果可以访问,就会将用户放进去,进入到自己做的各个模块中;如果没有访问 API 的权限,就会将用户赶出去。所以 API 是在网关里调的,
之所以没有做校权限的 API 是因为进入网关以后,大家的模块不用去校权限;大家每一个模块的 API 前面只需要判断用户是谁即可。
既然是系统认证的用户,网关又将其放到这里调 API (所有东西认证、呼叫的来源都是只能从网关来的);或者说有些 API 是被内部使用的、另外一个模块使用的;
只要认证是一个正常的用户,就会认为该用户是有权限的。
比如,认证的用户是从网关来的,即在网关处有权限,就不会再进行校权限,直接
执行即可。
如果,在商品模块调的 API ,系统认证的用户从商品模块来,即在商品模块处是有权限的;所以各自的模块都不会去进行校权限,这样的目的是为了减少权限系统的压力。如果每个模块在调之前还要进行校权限,就会增大权限系统的压力,使权限
系统变慢,从而导致所有功能都变慢;所以 API 中没有校权限的 API ,但是要实现该功能。