当前位置 :首页 >> 综艺

医疗系统的权限就该这样设计,自为!

2024-02-06   来源 : 综艺

3. 职责

码猿慢病云管理者系统会之前所的职责有如下三类:

工具栏的职责:客户侧工具栏的职责开关/硬件的职责:客户侧开关/硬件的职责,比如加到症状这个临床医学/病区的职责:1. 工具栏的职责

更高度集中客户侧的工具栏结果显示,如下:

目前所有这几个下端工具栏+子工具栏。

2. 开关职责

客户侧开关的职责,比如自订、删去、主编开关的职责,比如中风症状的4个开关,如下:

每个开关都有一个职责标识编码方式,比如inhos_patinfohot_get,客户侧只必须推论近期提出申请只用者的职责树之前所前所提共存这个职责,有则结果显示,没则不结果显示

3. 硬件职责

客户侧的硬件职责和开关职责共用,比如浏览中风症状这个职责相共同点的标识也是:inhos_patinfohot_get

那么这个硬件职责如何更高度集中?码猿慢病云管理者系统会之前所是将硬件职责的鉴权下沉到各个微咨询服务,交给Linux在开发设计硬件时通过@PreAuthorize注释更高度集中职责,比如浏览中风症状列同上的这个硬件,如下:

//com.code.ape.codeape.inhos.controller.PatInfoHotController#getPatInfoHotPage @Operation(summary = "分页浏览在院症状", description = "分页浏览在院症状") @GetMapping("/page" ) @InjectAuth @PreAuthorize("@pms.hasPermission('inhos_patinfohot_get')" ) public R> getPatInfoHotPage(Page page, PatInfoDTO DTO) { return R.ok(patInfoHotService.listPage(page,dto)); }

@PreAuthorize这个注释是Spring Security自带的鉴权硬件,其之前所的value这个种类默许SPEL同上达式,真实的构建预合于义如下:

/** * @author 公众号:码猿技术专栏 知识产权:不才于下所署,盗用必究 * {@link com.code.ape.codeape.common.security.component.PermissionService} */public class PermissionService { /** * 推论硬件前所提有任意xxx,xxx职责 * @param permissions 职责 * @return {boolean} */ public boolean hasPermission(String... permissions) { if (ArrayUtil.isEmpty(permissions)) { return false; } //预合于义(1) Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { return false; } //预合于义(2) Collectionextends GrantedAuthority> authorities = authentication.getAuthorities(); ////预合于义(3) return authorities.stream() .map(GrantedAuthority::getAuthority) .filter(StringUtils::hasText) .anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x)); }}

逻辑上其实很简单,上述预合于义三个其余部分:

预合于义(1) :从Spring Security 正则表达式之前所获先取近期只用者提出申请的身分讯息Authentication,其之前所就包括职责预合于义(2) :从只用者身分讯息Authentication之前所获先取只用者的职责树预合于义(3) :将近期提出申请只用者的职责和@PreAuthorize传进的职责相比较,推论前所提鉴权通过4. 临床医学/病区职责

这个职责则是相比较特殊性了,不须描述一下桥段:

在儿科会之前所,精神科/医护人员人员是无职责检视全部临床医学的资料的,必需检视自己都由临床医学/病区的资料,这样是为了避免精神科;你看看如果有个心怀不轨的精神科,随意更改其他临床医学/病区症状的资料,所致精神科不当病情,这样的应负谁来承担?

所以儿科会之前所都必须更高度集中医护人员临床医学/病区这个职责,这样才能保证不频发能避免的精神科。

码猿慢病云管理者系统会之前所的临床医学/病区职责如何更高度集中的呢?

在自订医护人员的时候有个临床医学职责的多选器,如下左图:

这样就能平易近人增设医护人员的临床医学/病区职责了,这其余部分相共同点人关系是专一化在codeape/sys_user_dept这张同上之前所,如下:

那么此时近期医护人员的临床医学/病区职责如何计算呢?

不须给答案,分为两种可能会;

第一种:WEB侧/PAD侧

不须说第一种:在WEB侧/PAD侧,医护人员的职责=医护人员所在的临床医学+医护人员的临床医学职责+共同点临床医学

什么意为?比如白鹿这个医护人员人员,如下左图:

所设临床医学为内分泌一个科,临床医学职责为神经内一个科+内分泌一个科+心内一个科,那么前所面两层的职责则是神经内一个科+内分泌一个科+心内一个科(注意到去重)

那么共同点临床医学什么意为?比如神经内一个科下面有个神经内一个科病区,但是医护人员的临床医学在进职时都增设在了神经内一个科,那么他们如何能想到神经内一个科病区的资料呢?

一种建议书可以在临床医学职责那一栏再加上神经内一个科病区,这种当然可行,但是你要为每个医护人员都增设一遍。

第二种建议书:可以将神经内一个科和神经内一个科病区共同点上来,这样只要有神经内一个科这个职责,那么就这不有神经内一个科病区这个职责,这个在码猿慢病云管理者系统会之前所也有增设共同点人关系,如下左图:

在加到临床医学的时候可以为了让下端数据流临床医学。

相共同点的人关系专一化在codeape/sys_dept_relation之前所,结构设计如下:

URL种类注释ancestorbigint祖不须数据流(临床医学/病区ID)descendantbigint子数据流(临床医学/病区ID)

临床医学/病区职责在只用者提出申请时就时会浏览出来放进SecurityContext正则表达式之前所,具体的方法如下左图:

那在医护人员浏览资料如何去下端据这个临床医学/病区职责截取呢?

在请求DTO之前所有个基础实体类com.code.ape.codeape.common.core.entity.BaseParam,如下:

@Datapublic class BaseParam { /** * 公立医院Id */ private Long hosId; /** * 只用者ID */ private Long userId; /** * 医护人员的临床医学职责 */ private List dataAuth; /** * 请求举例来说客户侧ID */ private String clientId; /** * 电源的SN号 */ private String sn;}

这个类之前所的所有种类都时会备用流经,只必须在controller方法之前所标注一个注释:@InjectAuth,如何够的呢?

@InjectAuth这个注释是通过AOP方式也备用流特别量,预合于义如下:

@Slf4j@RequiredArgsConstructor@Aspectpublic class CodeapeInjectAuthAspect implements Ordered { @SneakyThrows @Around("@annotation(injectAuth) &&" + "(@annotation(org.springframework.web.bind.annotation.PostMapping)||" + "@annotation(org.springframework.web.bind.annotation.GetMapping)||" + "@annotation(org.springframework.web.bind.annotation.DeleteMapping)||" + "@annotation(org.springframework.web.bind.annotation.PutMapping)||" + "@annotation(org.springframework.web.bind.annotation.RequestMapping))") public Object around(ProceedingJoinPoint joinPoint, InjectAuth injectAuth) { if (injectAuth.enable()){ CodeapeUser codeapeUser = Objects.requireNonNull(SecurityUtils.getUser()); Object[] args = joinPoint.getArgs(); for (int i = 0; i < args.length; i++) { if (!(args[i] instanceof BaseParam)) { continue; } BaseParam baseParam = (BaseParam) args[i]; /** * 1. web侧:职责就是近期提出申请只用者的职责 * 2. pda侧,职责则是电源的职责+近期提出申请只用者的职责 * 这里的职责先给定是token之前所的deptAuths,这个在提出申请的时候就浏览出来,缓共存redis之前所,所以这里直接用就可以 */ //公立医院管理者员+可执行不赋予职责 boolean flag= ArrayUtil.contains(codeapeUser.getRoleCodes(),SecurityConstants.SYSTEM_ADMIN_CODE) ||ArrayUtil.contains(codeapeUser.getRoleCodes(),SecurityConstants.HOS_ADMIN_CODE); baseParam.setDataAuth(flag?null:Arrays.asList(codeapeUser.getDeptAuths())); baseParam.setHosId(codeapeUser.getHosId()); baseParam.setUserId(codeapeUser.getId()); baseParam.setClientId(codeapeUser.getClientId()); baseParam.setSn(codeapeUser.getSn()); } } return joinPoint.proceed(); } @Override public int getOrder() { return Ordered.HIGHEST_PRECEDENCE + 4; }}

直接先取的是CodeapeUser之前所的deptAuths,CodeapeUser则是SecurityContext正则表达式的只用者身分讯息

这样则能够先取到只用者的临床医学/病区职责,然后则能在SQL之前所下端据这个dataAuth种类去截取资料了,比如分页浏览中风症状的硬件,controller方法如下:

com.code.ape.codeape.inhos.controller.PatInfoHotController#getPatInfoHotPage

SQL如下:

com.code.ape.codeape.inhos.mapper.PatInfoHotMapper#selectPatInfoPage

这其余部分的SQL相片则是下端据中风症状的临床医学去截取。

第二种PDA侧

这里的PDA指的是医护人员人员的手持电源,这个电源和PDA一样,下端据自己帐号提出申请上去,给大家粗略画一下PDA上都有哪些细节,如下左图:

其实就和APP是一样的,里面可以想到粗略四块细节(当然还有其他):

症状管理者:这个是结果显示所有的中风症状,医护人员人员可以为了让相共同点的症状完成资料采集,这样采集的资料才能和症状自合于绑合于验证任务:这个则是精神科下的劝导任务,按照一段时间内结果显示,比如精神科下的三餐前所后测血压这个劝导任务,则经过医护人员人员分离出来后,则变成了6个子任务:空腹测血压、餐点后测血压、餐点前所测血压、餐点后测血压、晚餐前所测血压、晚餐后测血压。那么在每个一段时间内结果显示要测血压的症状该医院无需,医护人员人员为了让相共同点的该医院则可以测血压验证历史记录:这里是展示所有症状校准的血压资料,按照一段时间内同上格形式的展示质控:这个则是电源的质控,医护人员人员每天要合于时对电源完成质控(质量验证),检视这台电源校准前所提确切

那么疑虑来了,PDA上必须结果显示的资料是整个公立医院的资料吗?显然不或许,也是必须下端据医护人员人员临床医学/病区职责截取,可以想到正下方有一个临床医学的筛为了让,默认是所有临床医学,则是近期提出申请只用者的所有临床医学职责

那么PDA侧的医护人员职责和WEB侧一样吗?

当然不是,因为电源共存以下两种互联可能会:

网络服务:连在wifi或者卡,这样能够时刻保证互联畅通的情形,属于网络服务情况下,里斯资料/上传资料直接访问期间咨询服务侧无需网络服务:有些公立医院没内网的wifi或者卡,必需连有线互联,一旦电源拔掉网线去病院验证,则是网络服务的情况下

网络服务情形就必须电源本地做初始化了,那么这个初始化的资料到底里斯哪些资料?不或许将整个公立医院的资料都里斯下去,电源的内核是实质的。这个时候就必须只用电源的职责了,在加到电源的时候有两个的为了让,如下:

临床医学和共同点临床医学这两个为了让,一般4台电源只供一个病区只用,此时将临床医学为了让为了让相共同点的病区无需,那么特殊性情形,比如一病区和二病区共用4台电源,此时就必须只用共同点临床医学了。

此时一合于会认清了电源的职责=临床医学+共同点临床医学

只要电源连在互联,在只用者不提出申请的情形,初始化硬件获先取资料的时候就一合于会获先取的是电源职责的资料。

那提出申请ATV电源的只用者职责呢?一合于会怎么先给定呢?很简单,分为两种可能会:

只用者的职责和电源的职责先取并集只用者的职责和电源的职责先取彼此之间

按照正常的逻辑上是一合于会是第二种可能会先取彼此之间,因为你医护人员人员没这个职责就不一合于会想到该临床医学/病区的资料,但是实质可能会是很多公立医院的医护人员人员都是轮转的,比如这个月到一病区,紧接著到二病区,他们的临床医学/病区职责的维护并不是很立刻,主要是讯息一个科的人员太懒了,这样的话就时会所致如果按照第二种可能会先取彼此之间,那么这个医护人员人员提出申请ATV电源就看到自己所管的临床医学/病区的资料了。所以在码猿慢病云管理者系统会之前所是采用的第一种建议书。

相关预合于义在com.code.ape.codeape.common.security.service.CodeapePDAUserDetailsServiceImpl#getUserDetails,如下左图:

归纳

这节细节概述了RBAC职责建模以及码猿慢病云管理者系统会之前所职责是如何设计的,不可缺少的是临床医学/病区职责的设计,大家一合于要理解其之前所的逻辑上,多数所有的儿科会都是按照这个逻辑上处理的。

本节细节所写了其余部分预合于义,关于预合于义的详细概述时会在上去书评之前所概述,现在不须了解一下。

原文:

作者:不才于下

如果冲动本文对你有设法,点赞关心默许一下

新冠药物有哪些药
米氟来特片是什么药
新冠治疗药物
应急救护进校园
治疗类风湿关节炎的首选药物
投资者提问:请问公司持有人牌照什么时候可以办下来

注资者发问:请问新公司免税牌照什么时候可以接办下来董秘回答步 步 较高SZ002251:您好!如有就其谈及的事项,新公司将在指定新闻媒体上进行谈及。忘了!查看非常多...

友情链接