☰
Current Page
Main Menu
Home
Home
Editing
05.添加规则
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
--- title: 添加规则 date: 2023-09-25 17:31:34 permalink: /pages/651934/ --- 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。 #### 3.4.1.1. 规则应用场景 对界面和菜单项的访问,数据模型中实体和属性级别的访问,数据满足某些条件的访问,例如,用户所在部门的权限,开发者可以轻松配置高级访问控制规则,且确保规则完全透明。 #### 3.4.1.2. 规则的定义 一个规则满足说明条件执行上面动作拥有规则的名称,规则描述,以及规则优先级。Codition注解与Action注解是成对出现,必须要有条件动作规则名称。我们可以用规则注解去描述一段业务行为,例如控制权限,对用户以及视图,菜单,属性,数据的访问。 #### 3.4.1.3. 什么是规则引擎 使用注解定义规则,引擎提供了一下注解定义,首先,注解都是成对出现,其次,注解定义在类上。 每个注解都有一个Name不能为空,作为唯一凭证。 规则如下所示: ● Name :规则名称 ● Description :规则描述 ● Priority :规则执行优先级 ● @Condition : 为了应用规则而必须满足的一组条件 ● @Action : 当条件满足时执行的一组动作 #### 3.4.1.4. **规则注解** ##### Action注解 | 字段名 | 中文名 | 可选值 | 描述 | | --------- | -------- | --------------------------------------------------- | ------------------------------------------------------------ | | name | 名称 | r01 | 规则名称 | | resource | 静态资源 | @Resource 静态资源 | 菜单、实体、属性这些都属于静态资源 | | filter | 过滤条件 | @Filter 过滤条件 | 条件组合 | | method | 方法调用 | @Method 方法调用 | | | condition | 复合条件 | & \| () & 同时满足执行 \| 任意满足执行 括号优先级 | 填@condition注解上面定义的名称,例如“r01”那么填入r01即可,如果需要多个条件可以用r02&r01即可如果两个条件任意生效可以是r01\|ro2 如果必须两边都要执行(r01&r02)\| (r03&r04) | 代码示例: ```java @Rules.Condition(scope = ScopeEnum.USER, object = "02hej7bkhto1t", name = "r01") @Rules.Action(name = "r11", condition = "r01", resources = @Rules.Resource(name = "r02", type = ResourceType.MENU, resource = "base_developer_center")) ``` ##### Resource注解 | 字段名 | 中文名 | 可选值 | | -------- | ------ | ---------------------- | | type | 类型 | 菜单、视图、属性、服务 | | action | 事件 | | | resource | 资源 | meta_model_menu | | effect | 允许 | 拒绝、允许 | | name | 名称 | r01 | 代码示例: ```java @Rules.Action(name = "r02", condition = "r01", resources = {@Rules.Resource(type = ResourceType.MENU, resource = "", name = "r03"), @Rules.Resource(type = ResourceType.MODEL, resource = "", name = "r04")}) ``` ##### Method注解 | 字段名 | 中文名 | 可选值 | | --------- | ---------- | -------------- | | name | 名称 | | | model | 模型名 | rbac_user | | parameter | 参数 | | | BEA | 注入前后 | AFTER / BEFORE | | methodSrc | 方法名 | 自定义服务名 | | modelDst | 注入模型名 | rbac_user | | methodDst | 注入服务名 | aa | 代码示例: ```java @Rules.Action(name = "r02", condition = "r01", methods = {@Rules.Method(modelDst = "rbac_user", model = "rbac_user", methodSrc = "login", methodDst = "aa", name = "r03")}) ``` ##### Filter注解 | 字段名 | 中文名 | 可选值 | | ------- | -------- | ------------------------- | | name | 名称 | | | model | 模型名 | rbac_user | | filter | 过滤条件 | [["name", "like", "%a%"]] | | context | 上下文 | | 代码示例: ```java @Rules.Action(name = "r02", condition = "r01", filters = {@Rules.Filter(filter = "[['name', 'like', '%a%']]", model = "rbac_user", name = "r03")}) ``` ###### Condition注解 | 字段名 | 中文名 | 可选值 | | ------ | ------ | ------------------------ | | scope | 作用域 | 用户、全局、租户、自定义 | | object | 对象 | {"admin"} | | name | 名称 | r01 | | script | 脚本 | 默认groovy脚本 | 如下所示是一组规则,r02规则描述用户登录之前先执行xx方法 ```java @Rules.Condition(scope = ScopeEnum.GLOBAL, name = "r02") @Rules.Action(methods = @Rules.Method(methodDst = "rbac_user.login", methodSrc = "rbac_user.xx"), name = "r02") ``` 如下所示就是一组规则,r01规则描述admin用户不能访问开发者中心,其他菜单可以访问。一组规则必须包含规则名称,规则条件,规则执行动作。 ```java @Rules.Condition(scope = ScopeEnum.USER, object = "admin", name = "r01") @Rules.Action(resources = @Rules.Resource(type = ResourceType.MENU, resource = "base_developer_center"), name = "r01") ```
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel