首页 > 其他分享 >【规则引擎】简易规则引擎在菜单权限的应用

【规则引擎】简易规则引擎在菜单权限的应用

时间:2023-01-09 17:45:44浏览次数:43  
标签:control 菜单 范式 contains 引擎 规则

背景

在年底,突发奇想,想对公司内部现有的菜单权限进行重新设计。

观察了令人头疼的硬编码后,想出可用规则引擎进行重构。

分析

观察如下代码,硬编码,很临时,很敷衍。但其实用数学或者代数思维理解,就是「取代」。

      if (system.contains(1109) && control.contains(1126)) {
        control.remove(1126);
      }
      if (system.contains(1109) && control.contains(1143)) {
        control.remove(1143);
      }
      if (system.contains(1113) && control.contains(1127)) {
        control.remove(1127);
      }

设计

观察了各种硬编码模式,分析了背后的意图,便总结出来一些范式。

业务范式

「业务范式」是我自己取的概念,也可以用计算机的思维理解,叫做 「关系运算指令」也可以。

例如:

  • 是否是公共基础菜单
  • 取代
  • 管理员必须有
  • 管理员不应有
  • XX角色应该有
  • XX类型用户应该有
  • 离职中用户应该有
  • 在职用户不应该有
  • 普通用户不应该有
  • 其他罕见类型

其实都是人类思维。硬生生写成了代码。现在的过程就是反过来按照人类思维总结设计。

规则引擎

以前模模糊糊了解过规则引擎,但这次突然想明白了。

规则引擎定义

规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

规则本质上是一个函数,如y=f(x1,x2,..,xn)

规则引擎由三部分

事实(Fact):就是用户输入的已经事实,可以理解为推理前的已知对象。
LHS(Left Hand Side):可以理解为规则执行需要满足的条件。
RHS(Right Hand Sike):可以理解为规则执行后的返回对象。

理解反思

那么以上的业务范式就隐含了规则引擎的三个部分。

以「取代」为例:
当什么模块下,什么菜单,应该优先于(取代)什么菜单。

事实:模块,或者出现了某个已知的,要被菜单
LHS:执行满足条件,这个条件比较简单,就是假设出现了这个菜单,或者是假设用户是某个角色,有点像邮件整理规则。
RHS: 执行后返回对象,这个就是用什么菜单 去取代之前的菜单。

这个又有点像运算符,或者指令集。

应用

在这个业务场景下,目标非常清晰和简单,就是将原本的编程代码逻辑,反向改成规则描述的通俗易懂的逻辑。

好在这个业务范式足够简单,甚至没有加减乘除。

如果需要一些判断条件,则需要具体对LHS进行设计。

标签:control,菜单,范式,contains,引擎,规则
From: https://www.cnblogs.com/slankka/p/17037743.html

相关文章

  • Zabbix使用LLD自动发现规则发现监控docker容器(下)
    本篇是使用Zabbix监控docker容器下篇。利用ZABBIX自动发现监控功能,在部署zabbixagent客户端的服务器上,编写自定义功能脚本,实现自动获取服务器上运行的docker服务并监控其运......
  • 两款开源.NET工作流引擎 Elsa 与ccflow使用比较
    ​相对java开源的工作流程引擎.net开源的工作流程引擎相对较少,这里整理两款.net开源工作流引擎,做一下对比使用。elsa示例代码:Githubd地址:https://github.com/zhenl/MyElsac......
  • 关于如何学好游戏3D引擎编程的一些经验
    ​ 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰        ——阿哲VS自己QQ79......
  • Mac Snipaste 不仅仅是截图工具,不在菜单栏显示,怎么样修改快捷键
    官网下载:https://www.snipaste.comSnipaste免费,支持Windows、Mac,Windows上的功能相当多而且,Mac也够用了不仅仅是个截图工具,具有强大功能:截图贴图(直接将截图贴在......
  • 3、CSS样式表内容规则的结构
    CSS规则由两部分组成:选择符和声明块。声明块由一个或多个声明组成,一个声明由一个属性和对应的属性值组成。一个样式表由一系列规则构成。p{color:aqua;......
  • 在Win11上恢复旧的右键菜单!
    https://www.abackup.com/easybackup-tutorials/windows-11-always-show-more-options-right-click-666.htmlhttps://zhuanlan.zhihu.com/p/537254971总结:还是得注册表......
  • Blazor实现菜单动画
    想到动画,你可能会去安装Blazor的动画组件BlazorAnimate,然后使用它。本人初学,暂时我也不知道原理,先不用组件,自己实现吧。虽然项目中我用了AntDesignBlazor,但是我忘了使用它......
  • win11右键菜单怎么回到win10旧版
    你好,我是悦创。win11系统的更新,相信很多家人们陆续换掉了win10,但win11的右键菜单犹如“过街老鼠人人喊打”,中看不中用,例如这样的:重命名等很多选项需要展开才能点击,顿时怀......
  • R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化|附代
    最近我们被客户要求撰写关于中药专利复方治疗用药规律的研究报告,包括一些图形和统计输出。应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律方法检......
  • Element Ui Form表单的校验规则rules详细说明
    ElementUI中对Form表单验证的使用介绍:Form组件提供了表单验证的功能,只需要通过rules属性传入约定的验证规则,并将Form-Item的prop属性设置为需校验的字段名即可......