深度分页问题优化方案

问题原因

Mysql使用select * from table limit offset, rows分页在深度分页的情况下, 性能急剧下降。

例如:select * 的情况下直接⽤limit 600000,10 扫描的是约60万条数据,并且是需要回表 60W次,也就是说⼤部分性能都耗在随机访问上,到头来只⽤到10条数据(总共取600010条数据只留10条记录)

优化方案

前端方案:业务层面限制跨度比较大的跳页

提供2种风格分页器供用户选择

  1. 标准分页器,展示最后一页和跳转指定页输入框
    image.png
  2. 简单分页器
    image.png

参考
百度方案: 不展示最后一页和直接跳转指定分页的输入框
image.png
Google方案:只展示查看下一页的按钮
image.png

界面设计器选表格/画廊的属性面板提供分页器风格的属性下拉选择

image.png

xml示例
<!-- 表格使用的标准分页器 --> <view type="TABLE" paginationStyle="SIMPLE"> <!-- fields --> </view> <!-- 画廊使用默认的标准分页器 --> <view type="GALLERY" paginationStyle="STANDARD"> <!-- fields --> </view>

后端方案

  1. 使用索引:确保数据库表中的相关字段上创建了适当的索引。索引可以加快查询速度,特别是在处理大数据量时。

  2. 分批查询:将大数据分成多个较小的批次进行查询,而不是一次性查询全部数据。可以通过限制每次查询的数据量和使用合适的偏移量来实现分批查询,例如使用LIMIT和OFFSET子句。

  3. 基于游标的分页:使用基于游标的分页技术,而不是传统的偏移分页。游标分页是通过记录上一次查询的游标位置,在下一次查询时从该位置开始获取新的数据,避免了大偏移量的影响。这可以通过数据库自身的功能(例如MySQL的CURSOR)或使用第三方库来实现。

  4. 缓存数据:如果数据变化较少,可以考虑将查询结果缓存到内存中,以避免频繁地查询数据库。这样可以提高页面相应速度,并减轻数据库负担。缓存的数据应该根据业务需要及时更新。

  5. 数据预处理:如果查询结果经常需要进行复杂的计算或处理,可以考虑提前对数据进行预处理并缓存结果,以减少每次查询的计算负担。

  6. 数据库优化:针对具体数据库系统,可以根据实际情况进行数据库调优。例如,合理设置数据库连接池大小、调整数据库参数等。

  7. 分布式存储和计算:对于非关系型数据库或分布式存储系统,可以考虑使用分布式存储和计算方案,将数据分散存储在多个节点上,并通过计算节点并行处理查询请求,以提高性能和可伸缩性。

参考链接

MySQL深分页场景下的性能优化

Oinone社区 作者:原创文章,如若转载,请注明出处:https://doc.oinone.top/other/75.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
的头像
上一篇 2023年6月20日 pm4:07
下一篇 2023年11月2日 pm1:58

相关推荐

  • 4.1.11 函数之异步执行

    异步任务是非常常见的一种开发模式,它在分布式的开发模式中有很多应用场景如: 高并发场景中,我们一般采用把长流程切短,用异步方式去掉可以异步的非关键功能,缩小主流程响应时间,提升用户体验 异构系统的集成调用,通过异步任务完成解耦与自动重试 分布式系统最终一致性的可选方案 今天我们了解oinone是如何结合Spring+TbSchedule来完成异步任务 一、TbSchedule介绍 它是一个支持分布式的调度框架,让批量任务或者不断变化的任务能够被动态的分配到多个主机的JVM中,在不同的线程组中并行执行,所有的任务能够被不重复,不遗漏的快速处理。基于ZooKeeper的纯Java实现,由Alibaba开源。在互联网和电商领域TBSchedule的使用非常广泛,目前被应用于阿里巴巴、淘宝、支付宝、京东、聚美、汽车之家、国美等很多互联网企业的流程调度系统。也是笔者早期在阿里参与设计的一款产品。 oinone的异步任务执行原理(如下图4-1-11-1所示),先做一个大致了解: 图4-1-11-1 Oinone的异步任务执行原理图 基础管理工具 下载tbSchedule的控制台jar包去除文件后缀.txt(详见本书籍【附件一】)pamirs-middleware-schedule-console-3.0.1.jar.txt(31.2 MB) 启动控制台 java -jar pamirs-middleware-schedule-console-3.0.1.jar 图4-1-11-2 控制台启动方式 访问地址 http://127.0.0.1:10014/schedule/index.jsp?manager=true 图4-1-11-3 访问地址 配置zk连接参数 图4-1-11-4 配置zk连接参数 oinone默认实现任务类型 图4-1-11-5 Oinone默认实现任务类型 baseScheduleNoTransactionTask baseScheduleTask remoteScheduleTask — 适用于pamirs-middleware-schedule独立部署场景 serialBaseScheduleNoTransactionTask serialBaseScheduleTask serialRemoteScheduleTask — 适用于pamirs-middleware-schedule独立部署场景 cycleScheduleNoTransactionTask delayMsgTransferScheduleTask deleteTransferScheduleTask 注: a. 默认情况下:所有任务的任务项都只配置了一个任务项0,只有一台机器能分配任务。 1. 如果要修改配置可以在启动项目中放置schedule.json,来修改配置 2. 人工进入控制修改任务对应任务项的配置 b. 如果想为某一个核心任务配置的独立调度器,不受其他任务执行影响。那么见独立调度的异步任务 任务表相关说明 图4-1-11-6 任务表相关说明 二、构建第一个异步任务(举例) Step1 新建PetShopService和PetShopServiceImpl 1 新建PetShopService定义updatePetShops方法 package pro.shushi.pamirs.demo.api.service; import pro.shushi.pamirs.demo.api.model.PetShop; import pro.shushi.pamirs.meta.annotation.Fun; import pro.shushi.pamirs.meta.annotation.Function; import java.util.List; @Fun(PetShopService.FUN_NAMESPACE) public interface PetShopService { String FUN_NAMESPACE = "demo.PetShop.PetShopService"; @Function void updatePetShops(List<PetShop> petShops); } 图4-1-11-7 新建PetShopService定义updatePetShops方法 PetShopServiceImpl实现PetShopService接口并在updatePetShops增加@XAsync注解 displayName = "异步批量更新宠物商店",定义异步任务展示名称 limitRetryNumber = 3,定义任务失败重试次数,,默认:-1不断重试 nextRetryTimeValue = 60,定义任务失败重试的时间数,默认:3 nextRetryTimeUnit,定义任务失败重试的时间单位,默认:TimeUnitEnum.SECOND delayTime,定义任务延迟执行的时间数,默认:0 delayTimeUnit,定义任务延迟执行的时间单位,默认:TimeUnitEnum.SECOND package pro.shushi.pamirs.demo.core.service; import org.springframework.stereotype.Component; import pro.shushi.pamirs.demo.api.model.PetShop; import pro.shushi.pamirs.demo.api.service.PetShopService; import pro.shushi.pamirs.meta.annotation.Fun; import pro.shushi.pamirs.meta.annotation.Function; import pro.shushi.pamirs.trigger.annotation.XAsync; import java.util.List; @Fun(PetShopService.FUN_NAMESPACE) @Component public class PetShopServiceImpl implements PetShopService { @Override @Function @XAsync(displayName = "异步批量更新宠物商店",limitRetryNumber = 3,nextRetryTimeValue = 60) public void updatePetShops(List<PetShop> petShops) { new PetShop().updateBatch(petShops); } } 图4-1-11-8 实现PetShopService接口并在updatePetShops增加@XAsync注解 Step2 修改PetShopBatchUpdateAction的conform方法 引入PetShopService 修改conform方法 利用ArgUtils进行参数转化,ArgUtils会经常用到。 调用petShopService.updatePetShops方法 package pro.shushi.pamirs.demo.core.action; …… 引依赖类 @Model.model(PetShopBatchUpdate.MODEL_MODEL) @Component public class PetShopBatchUpdateAction { @Autowired private PetShopService petShopService; ……其他代码 @Action(displayName = "确定",bindingType = ViewTypeEnum.FORM,contextType = ActionContextTypeEnum.SINGLE) public PetShopBatchUpdate conform(PetShopBatchUpdate data){ if(data.getPetShopList() == null || data.getPetShopList().size()==0){ throw…

    2024年5月23日
    85600
  • 如何删除系统权限中默认的首页节点

    场景: 并没有设置过首页的配置,为什么在系统权限这里的配置菜单中却有首页的配置。而且显示当前资源未完成初始化设置,无法配置。这个文章将帮助你删除这个节点。 注意:如果添加了以下代码,后续如果需要使用首页的配置,则需要删除该代码。 扩展权限加载节点: 遍历权限加载的节点,找到需要删除的模块首页节点。删除节点。 @Component @Order(88) @SPI.Service public class MyTestNodeLoadExtend implements PermissionNodeLoadExtendApi { @Override public List<PermissionNode> buildRootPermissions(PermissionLoadContext loadContext, List<PermissionNode> nodes) { //删除 TopModule.MODULE_MODULE 的首页节点。 String homepage = TranslateUtils.translateValues(PermissionNodeLoaderConstants.HOMEPAGE_DISPLAY_VALUE); for (PermissionNode node : nodes) { //如果需要删除多个模块的首页,在这里多加一个逻辑与条件即可。 if (!(node instanceof ModulePermissionNode) || !TopModule.MODULE_MODULE.equals(((ModulePermissionNode) node).getModule())) { continue; } List<PermissionNode> permissionNodes = node.getNodes(); Iterator<PermissionNode> iterator = permissionNodes.iterator(); while (iterator.hasNext()) { PermissionNode permissionNode = iterator.next(); if (ResourcePermissionSubtypeEnum.HOMEPAGE.equals(permissionNode.getNodeType()) && homepage.equals(permissionNode.getDisplayValue())) { iterator.remove(); //如果是删除多个模块首页,这里的return改为break; return nodes; } } } return nodes; } } 看效果:首页节点成功删除。

    2024年12月31日
    1.1K00
  • 如何自定义覆盖内置模块的页面

    1.首先通过sql查询找到我们需要的页面,从其中的template字段复制出原视图的配置 通过模型编码model在base_view查找需要修改的视图 select * from base_view where model='workflow.WorkflowUserTask' and is_deleted = 0; 2.将base_view的template内容复制到java的core工程的resources目录下新建一个xml文件,修改里面的动作名称 <view widget="WorkFlowImplement"> <template slot="actions"> <action name="$$internal_GotoListTableRouter" priority="1" model="workflow.WorkflowUserTask" tag="contextFreeAction"/> <action name="approveStaging" widget="FlowTaskCommonAction" invisible="!(activeRecord.allowStaging)" priority="2" label="新暂存" model="workflow.WorkflowUserTask" displayName="新暂存"/> <action name="workflow_agree" invisible="!(activeRecord.allowAgree && activeRecord.status == &apos;ACTIVE&apos;)" priority="3" label="新同意" model="workflow.WorkflowUserTask" load="fetchDetailReadOnly" displayName="新同意" goBack="true" validateForm="true" loadRootData="true"/> <action name="workflow_rejust" invisible="!(activeRecord.allowReject && activeRecord.status == &apos;ACTIVE&apos;)" priority="4" label="新拒绝" model="workflow.WorkflowUserTask" displayName="新拒绝" goBack="true" loadRootData="true" tag="contextFreeAction"/> <action name="workflow_turnon" invisible="!(activeRecord.taskType == &apos;APPROVE&apos; && activeRecord.allowTransfer && activeRecord.status == &apos;ACTIVE&apos;)" priority="5" label="新转交" model="workflow.WorkflowUserTask" load="fetchDetailReadOnly" displayName="新转交" goBack="true" loadRootData="true" tag="contextFreeAction"/> <action name="workflow_addsign" invisible="!(activeRecord.taskType == &apos;APPROVE&apos; && activeRecord.allowAddSign && activeRecord.status == &apos;ACTIVE&apos;)" priority="6" label="新加签" model="workflow.WorkflowUserTask" load="fetchDetailReadOnly" displayName="新加签" goBack="true" loadRootData="true" tag="contextFreeAction"/> <action name="workflow_write_fallback" invisible="!(activeRecord.taskType == &apos;WRITE&apos; && activeRecord.allowFallback && activeRecord.status == &apos;ACTIVE&apos;)" priority="7" label="新回退" model="workflow.WorkflowUserTask" displayName="新回退" goBack="true" loadRootData="true" tag="contextFreeAction"/> <action name="workflow_sharing" priority="8" label="新分享" model="workflow.WorkflowUserTask" displayName="新分享" goBack="true" loadRootData="true" tag="contextFreeAction"/> </template> <template slot="fields"> <field name="remark" widget="TextArea" invisible="activeRecord.taskType != &apos;APPROVE&apos;" priority="8" model="workflow.WorkflowUserTask" data="remark" displayName="意见备注"/> </template> </view> 3.在生命周期的元数据编辑方法内覆盖视图 package pro.shushi.pamirs.demo.core.init; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import pro.shushi.pamirs.boot.common.api.command.AppLifecycleCommand; import pro.shushi.pamirs.boot.common.extend.MetaDataEditor; import pro.shushi.pamirs.core.common.InitializationUtil; import pro.shushi.pamirs.demo.api.DemoModule; import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j; import pro.shushi.pamirs.meta.api.dto.meta.Meta; import pro.shushi.pamirs.meta.enmu.ViewTypeEnum; import pro.shushi.pamirs.workflow.app.api.model.WorkflowUserTask; import java.util.Map; @Slf4j @Component @Order(Ordered.LOWEST_PRECEDENCE) public class DemoModuleMetaInstall implements MetaDataEditor { @Override public void edit(AppLifecycleCommand command,…

    2024年7月2日
    1.3K00
  • 5.2.0版本feature:支持上传文件不存储到PamirsFile,请升级对应版本

    版本号: 5.2.4 版本发布日期:2024.10.24更新要点:支持上传文件不存储到PamirsFile 5.2.0 版本 升级说明及步骤(已升级为5.0.0版本忽略) 此版本与4.7.8版本的兼容方案如下,请严格参照升级说明及步骤进行1、【重要】升级前备份base库和用户权限模块所在的库 2、【重要】升级过程执行SQL严格按照升级文档中的步骤执行。特别注意:部分SQL是要求【发布前执行】,部分SQL是要求【发布后执行】 5.0.0升级详细说明及步骤 升级内容(5.2.0) 支持上传文件不存储到PamirsFile 表达式源码模式支持parentRecord 支持pamirs.persistence.global.createDatabaseTimeout配置创建数据的超时时间,单位:秒,默认:5秒 动作支持二次确认相关文字翻译配置 优化-Plifecycle默认使用INSTALL,启动参数可无需配置 优化数据可视化数据源为数据库类型时的sql参数拼接 优化数据可视化从报表入口新增图表的交互 修复数据源连接串检查报错的问题 修复模型设计器创建数据字典时未校验内置名称的问题 修复区间字段的重置搜索 修复搜索偏好方案名称的空值判断 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm install即可自动升级到最新版本 版本包信息 Oinone平台部署及依赖说明(v5.0) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <pamirs.middleware.version>5.2.2</pamirs.middleware.version> <pamirs.k2.version>5.2.3</pamirs.k2.version> <pamirs.framework.version>5.2.4</pamirs.framework.version> <pamirs.boot.version>5.2.5</pamirs.boot.version> <pamirs.distribution.version>5.2.4</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.2.1</pamirs.metadata.manager> <pamirs.designer.metadata.version>5.2.0</pamirs.designer.metadata.version> <pamirs.core.version>5.2.4</pamirs.core.version> <pamirs.workflow.version>5.2.0</pamirs.workflow.version> <pamirs.workbench.version>5.2.0</pamirs.workbench.version> <pamirs.data.visualization.version>5.2.5</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.2.0</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.2.1</pamirs.flow.designer.base.version> <pamirs.workflow.designer.version>5.2.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.2.2</pamirs.model.designer.version> <pamirs.ui.designer.version>5.2.1</pamirs.ui.designer.version> <pamirs.data.designer.version>5.2.4</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.2.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.2.3</pamirs.eip.designer.version> 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.4-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.4-arm64 镜像拉取 镜像或JAR版本:5.2.4 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.4 部署镜像:(包含前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-mini-v5.2:5.2.4 流程设计器镜像:(包含前后端服务,仅包含流程设计器) docker pull harbor.oinone.top/oinone/workflow-designer-v5.2:5.2.4 后端镜像:(仅包含后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/designer-backend-v5.2:5.2.4 前端镜像:(仅包含前端服务,包含全部设计器) PS:前端镜像版本为独立版本,与其他镜像版本不同。原基础镜像为nginx-1.21.0版本,从5.0.7版本开始使用nginx-1.24.0版为基础镜像 docker pull harbor.oinone.top/oinone/designer-frontend-v5.2:5.2.5 独立部署所有设计器JAR:(后端服务,包含所有设计器)pamirs-designer-boot-v5.2-5.2.4.jarpamirs-designer-boot-v5.2-latest.jar 独立部署流程设计器JAR:(后端服务,仅包含流程设计器)pamirs-workflow-designer-boot-v5.2-5.2.4.jarpamirs-workflow-designer-boot-v5.2-latest.jar 后端无代码设计器Jar包启动方法 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年10月25日
    65500
  • 新版权限操作手册(5.0以上)

    一 整体介绍 1. 角色类型: 为了更好地管理和控制平台中的不同用户,权限系统将对角色进行分类定义。通过角色分类,可以更高效地管理同一类角色,无需单独操作每个角色,实现统一管理。 2. 角色管理: 角色管理是权限系统中的一个基础功能,负责管理具体角色的创建、编辑和禁用,以及对角色的单独操作。 3. 系统权限: 可配置某个应用或其下的某个菜单、某个应用的首页的管理权限和访问权限。 管理权限:赋予某角色后,该角色具备向下分配权限的能力。 访问权限:赋予某角色后,该角色可进行访问。访问权限可配置多个权限组,不同权限组可授权给不同角色。 注: 此处应用下的“首页”菜单是在【应用中心-设置首页-绑定视图】中配置的视图。权限控制是针对这个视图进行的。只有当在设置首页时选择了绑定视图,应用下才会有对应的“首页”菜单;否则,该菜单将不可见。 当【应用中心-设置首页-绑定菜单】只需单独为应用下的某个菜单进行授权即可。 拥有访问权限并不代表拥有管理权限,同理,拥有管理权限也不代表拥有访问权限。这两种权限需要单独授权。二者并无直接关系。 4. 数据权限项和数据权限: 数据权限项:通过为某个模型配置过滤条件来定义特定的数据访问规则,但这些规则不会立即生效。它们需要与数据权限配合使用,以实现精细化的数据访问权限控制。 数据权限:为多个角色应用指定多个数据权限项,类似于系统权限的管理,但其范围更广泛,涵盖了对所有模块的授权。 通过数据权限项定义具体的访问规则,再通过数据权限将这些规则分配给不同的角色,以实现全面的权限控制。 二 操作手册 2.1 创建用户、绑定角色 创建一个名为testName的用户。 2.1.2 用户与角色的绑定(3种方式) 2.1.2.1 创建用户时为其单个或批量绑定角色 在创建用户页面进行添加绑定的角色,勾选完成,点击“确定”,完成角色的添加。 2.1.2.2 修改用户时为其单个或批量绑定角色 在修改用户页面进行添加绑定的角色,勾选完成,点击“确定”,完成角色的添加。 2.1.2.3 选择指定用户为其单个或批量绑定角色 指定用户后点击绑定角色,进行绑定的角色。 2.2 应用的授权–访问权限 访问权限是指将特定应用程序授权给相应的角色,一旦用户被分配到这些角色,他们将获得访问该应用程序的权限。确保了只有经过认证的用户才能访问特定的应用功能或数据。 2.2.1 应用与角色的授权–访问权限 选择系统权限,点击某个想要为其授权的应用。 添加角色,点击“确定”按钮,为应用授权。 授权成功,显示可以访问此应用的角色。 2.2.2 菜单与角色的授权–访问权限 选中系统权限,点击某个想要为其授权的菜单,为其添加权限组。 配置权限组,保存配置。 为权限组授权对应的角色。 授权成功,显示可以访问此菜单的角色。 2.2.3 批量授权–访问权限 我们支持对单个或多个应用程序及其菜单执行批量授权操作,以授予相应的访问权限。 角色权限访问: 角色未被授予应用的访问权限时,即使授予了菜单权限也无法访问。 角色被授予应用访问权限但未被授予菜单权限时,仍然无法访问菜单。 只有当角色同时被授予应用和菜单的权限时,才能访问相关菜单。 批量授权: 该功能仅作为添加角色至应用或菜单配置访问权限的入口。 批量授权: 在批量授权过程中,平台会自动创建一个默认权限组,这个权限组赋予了用户管理所有数据和当前菜单下所有管理权限的能力。这个默认权限组的创建会根据不同的平台版本进行区分处理。 在5.0.4版本之前,平台在创建默认权限组时,并不会自动勾选动作权限。 从5.0.4版本开始,包括5.0.4版本在内,平台会自动勾选所有动作权限,简化了授权流程。 值得注意的是,默认权限组在首次创建时遵循当时的动作权限规则。如果后续进行多次批量授权,平台不会重新创建默认权限组,而是保留之前的设置。因此,即使在后续的批量授权过程中,动作权限也会保持之前的状态。 总结来说,批量授权时,平台会根据版本自动创建带有或不带有动作权限的默认权限组,且该默认权限组在多次授权过程中保持不变,不会随每次授权而更新其动作权限设置。 找到系统权限菜单,点击批量配置。 选择单个或多个应用为其添加访问权限,点击添加角色进行添加操作。 进入添加角色页面。 选择需要添加的角色,点击“确定”按钮,完成角色的授权。 在批量授权过程中,添加角色框中的角色将被视为本次批量授权的角色。 此时完成批量授权,点击取消批量即可。 验证是否批量授权成功:点击已经授权的应用下某一菜单,看到“管理所有数据”下有我们添加的“子管理员”。 2.3 应用的授权–管理权限 管理权限涉及将应用程序的管理功能授权给特定角色,例如“子管理员”。拥有管理权限的角色能够进一步授权其他用户管理权限,可以向下分配。通过这种方式,组织可以实施分级的管理结构,确保各级管理员能够有效地管理和分配资源。 注:如果要为应用授予管理权限,则该应用下的所有菜单也会被授予管理权限。此外,也可以单独为某个应用下的特定菜单授予管理权限。 2.3.1 应用与角色的授权–管理权限 选择系统权限,点击某个想要为其授予管理权限的应用。 进入添加角色页面。 添加可管理此应用的角色,点击“确定”,完成角色的授权。 授权成功,显示可以管理此应用的角色。 2.3.2 菜单与角色的授权–管理权限 选择系统权限,点击某个想要为其授予管理权限的菜单。 进入添加角色页面。 添加可管理此菜单的角色,点击“确定”,完成角色的授权。 授权成功,显示可以管理此菜单的角色。 2.2 实例:向下分配权限–子管理员 子管理员描述 管理权限向下分配能力:子管理员可以向下分配管理权限,包括向其他角色授予或取消某应用、菜单或首页的管理权限。 访问权限:子管理员被授予访问权限,可以访问平台中指定的应用、菜单或首页。 持续的管理权限向下分配:子管理员可以持续地向下分配管理权限,确保权限的适当控制和分配。 子管理员一定要为管理中心应用配置访问和管理权限。 2.2.1 创建一个名字为“子管理员”的角色 2.2.2 角色与用户的绑定 2.2.3 为子管理员分配应用的管理权限 如果要为应用授予管理权限,则该应用下的所有菜单也会被授予管理权限。此外,也可以单独为某个应用下的特定菜单授予管理权限。 应用管理权限的分配 选择系统权限,点击某个想要为其授予管理权限的应用。 进入添加角色页面。 添加可管理此应用的角色,点击“确定”,完成角色的授权。 授权成功,显示可以管理此应用的角色。 2.2.4 登录子管理员继续向下级分配权限 输入账号、密码,点击登录。 在上级角色中我们已经为“子管理员”角色,授权了管理中心的管理、访问权限和具体的某个应用的管理权限。 选择系统权限,点击某个想要为其授权的应用。在此页面“子管理员”这一角色还可以根据所需的业务场景继续向下级分配管理权限和访问权限。 至此,已成功实现子管理员角色所需的管理权限的配置。子管理员随后可依循相同流程,对下属用户进行相应的权限分配。

    2024年7月2日
    4.8K00

Leave a Reply

登录后才能评论