框架模块说明 #05 权限管理_02

搭建Vue3 Admin Plus 框架 提供了一个现代化的 Vue 3 后台管理模板,具备完善的功能和优秀的性能。通过上述步骤,您可以快速搭建并部署一个功能强大的后台管理系统。如果需要更多定制化功能,您可以进一步扩展和配置该框架。 阅读详情

背景

上篇中介绍了权限注册和权限过滤器的使用,这篇我想讲下我对菜单的设计,在面向对象的设计中有一个很重要的观点谁拥有信息谁拥有职责,秉承这个原则,那么谁拥有操作仅限就拥有这个菜单的权限了,在Vue做为后台管理大行其道的今天,应该是叫router比较合适。

注解设计

所以我在设计SystemResource这个注解时就设计了,menuCode/menuName/parentMenuCode/parentMenuName这四个feild来标注菜单,其中parentMenuCode/parentMenuName用来标注在类上的,menuCode/menuName标注在方法上。

package org.cloud.dimension.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.cloud.constant.CoreConstant;
import org.springframework.stereotype.Component;

/**
 * 系统资源注解
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface SystemResource {

    String path() default "";  //资源路径,用于分类资源,例如 商品管理/SPU管理

    String description() default "";     // 资源名称

    String value() default "";     // 资源code

    CoreConstant.AuthMethod authMethod() default CoreConstant.AuthMethod.ALLSYSTEMUSER;   //验证方式,默认为所有的登录用户,ByUserAuth

    // 如下为菜单相关
    String menuName() default "";    // 菜单名称,可选,如果不为空,那么会自动创建菜单

    String menuCode() default "";    // 菜单编码,可选,如果不为空,那么会自动创建菜单

    String parentMenuCode() default ""; // 父级菜单名称,默认为无上级,用controller的类上

    String parentMenuName() default ""; // 父级菜单名称,默认为无上级,用controller的类上

    int index() default 0;  // 序号

    String icon() default "";
}

资源和菜单同步

在上篇中提到同步资源的时候,首先会同步父级菜单到menu表里

private ParentMenuCreate getParentMenuCreate(Map<String, Object> beans, String beanName) {
        SystemResource beanResourceAnnotation = AnnotationUtils.findAnnotation(beans.get(beanName).getClass(), SystemResource.class);
        logger.info("beanResourceAnnotation:{}", beanResourceAnnotation);
        TFrameMenu parentMenu = null;
        if (beanResourceAnnotation == null) {
            return null;
        }

        if (!SystemStringUtil.single().isEmpty(beanResourceAnnotation.parentMenuCode())) {
            parentMenu = new TFrameMenu();
            parentMenu.setMenuCode(beanResourceAnnotation.parentMenuCode());
            parentMenu.setMenuName(beanResourceAnnotation.parentMenuName());
            parentMenu.setSeqNo(beanResourceAnnotation.index());
            parentMenu.setCreateBy("admin");
            parentMenu.setCreateDate(new Date());
            parentMenu.setUpdateBy("admin");
            parentMenu.setUpdateDate(new Date());
            parentMenu.setType(0);  // 类上注解定义为目录
            parentMenu.setShowType(0);
            parentMenu.setIcon(StrUtil.isEmpty(beanResourceAnnotation.icon())? "iconfont icon-caidan" : beanResourceAnnotation.icon());
            parentMenu.setComponentPath("layout/routerView/parent");    //新的后台管理
            parentMenu.setMenuUrl(beanResourceAnnotation.path());
            parentMenu.setStatus(1);
            try {
                String jsonStr = JSON.toJSONString(systemResourceRegisterFeignClient.saveOrUpdateMenu(parentMenu).getData());
                parentMenu = JSON.parseObject(jsonStr, TFrameMenu.class);
                logger.info("parentMenu:{}", parentMenu);
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
        return new ParentMenuCreate(beanResourceAnnotation, parentMenu);
    }

然后会将方法上的menuCode注解挂在定义的父菜单下,并将菜单和资源的关系绑定在一起

TFrameMenu menu = new TFrameMenu();
                    menu.setMenuCode(methodResourceAnnotation.menuCode());
                    menu.setMenuName(methodResourceAnnotation.menuName());
                    menu.setSeqNo(methodResourceAnnotation.index());
                    menu.setCreateBy("admin");
                    menu.setParentMenuId(parentMenuResult.parentMenu.getMenuId());
                    menu.setIcon(StrUtil.isEmpty(methodResourceAnnotation.icon()) ? "iconfont icon-biaodan" : methodResourceAnnotation.icon());
                    menu.setType(1);
                    menu.setMenuUrl(StrUtil.addPrefixIfNot(methodResourceAnnotation.menuCode(),"/"));  // 新版本的后台管理,加上/
                    menu.setComponentPath(methodResourceAnnotation.menuCode() + "/index");
                    menu.setCreateDate(new Date());
                    menu.setUpdateBy("admin");
                    menu.setUpdateDate(new Date());
                    menu.setStatus(1);
                    if (AuthMethod.BYUSERPERMISSION.equals(methodResourceAnnotation.authMethod())) {
                        menu.setShowType(1);
                        String functionResourceCode = String.format("%s::%s::%s", microName, parentMenuResult.beanResourceAnnotation.path(),
                            methodResourceAnnotation.value());
                        menu.setFunctionResourceCode(functionResourceCode);
                    } else {
                        menu.setShowType(0);
                    }
                    try {
                        logger.info("menu:{}", systemResourceRegisterFeignClient.saveOrUpdateMenu(menu));
                    } catch (Exception e) {
                        logger.error(e.getMessage(), e);
                    }

菜单同步后,前台根据同步的代码路径开发相应的页面就好了。

总结

通过这篇文章,其实已经基本讲清楚的操作权限相关的内容,下面会讲操作权限的相关内容,敬请期待。详细代码请参考

GitCode - 全球开发者的开源社区,开源代码托管平台

AWS IAM权限管理实战:从策略原理到多账户治理 IAM(Identity and Access Management)是AWS云环境的元权限层,其核心在于通过策略(Policy)实现细粒度访问控制。理解IAM策略的四维结构——Effect(Allow/Deny)、Action、Resource和Condition——是构建安全权限体系的基础。它遵循‘默认拒绝、显式允许、显式拒绝优先’的评估逻辑,直接影响API调用成败与系统稳定性。在金融、电商等强合规场景中,IAM不仅支撑最小权限实践,更深度集成组织单元(OU)与服务控制策略(SCP),实现跨账号权限收敛 阅读详情

相关推荐

构建自动化发布前检查框架:从原理到Java实现

发布前检查是CI/CD流水线中的关键环节,通过自动化验证机制确保代码质量。其核心原理是基于规则引擎和状态机设计,实现检查任务的并发执行和结果决策。这种框架的技术价值在于将人工检查标准化,显著提升发布流程的可靠性和效率。在应用场景上,可集成代码质量检查、安全扫描、性能测试等多维度验证,自然收敛到Odyssey这样的自动化检查系统。通过模块化设计和异步任务处理,能够有效解决传统发布流程中的遗漏问题和效率瓶颈,为工程实践提供可靠保障。

weixin_30673611的博客 410

框架模块说明 #05 权限管理_03

本文围绕数据权限的设计与实现展开,结合实际开发场景,从全局控制、权限配置、表结构设计、注解类定义、自定义标签、MyBatis标签拦截器以及实用工具类等多个方面进行了全面介绍,旨在为开发者提供完整的数据权限实现方案。灵活性:支持多维度配置(角色、用户)与动态权限规则加载。可扩展性:结合 MyBatis 拦截器与工具类,便于扩展和适配多种业务需求。高效性:利用缓存优化权限查询性能,减少数据库查询压力。t=O83A。

YouYouLongLong的博客 900

Java开发者必看:5分钟搞定PaddleOCR表格识别,导出Excel和HTML超详细教程

本文为Java开发者提供了集成PaddleOCR实现智能表格识别的详细教程,包括环境配置、核心代码实现、结果导出到Excel和HTML的步骤,以及性能优化技巧。通过PaddleOCR技术,开发者可以快速将图片表格转换为结构化数据,大幅提升工作效率。

weixin_30872499的博客 99

Magisk深度解析:系统级模块化框架与Android权限管理核心技术

Magisk作为Android生态中革命性的系统级模块化框架,通过创新的Ramdisk注入技术和Zygisk进程Hook机制,实现了无痕系统修改与动态权限管理。本文将从技术架构、实战部署、高级应用、安全策略、性能优化及生态发展六个维度,深度剖析Magisk的核心技术原理与实践应用。 ## 技术架构解析:模块化系统框架设计 ### 核心原理:Ramdisk注入与启动流程劫持 Magisk的核心

gitblog_00217的博客 361

用示波器抓取同步Buck自举电容波形:从充电回路到SW节点振铃的完整分析

本文通过实测TI TPS54561和MPS MPQ4572同步Buck芯片,详细解析了自举电容在充电、维持和放电三个工作阶段的波形特征。重点揭示了电感泄放回路与充电回路重叠时,在SW节点引发的振铃现象及其产生机理,并提供了串联阻尼电阻等有效的工程抑制方法。文章结合示波器实测,为硬件工程师提供了从波形观测到问题调试的完整实践指南。

weixin_29276847的博客 373

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2650

Django Web框架笔记day05

《Django Web框架笔记》 目录 文章目录《Django Web框架笔记》目录admin 后台数据库管理自定义后台管理数据表修改后台Models的展现形式模型管理器类数据库表管理数据表关联关系映射一对一映射一对多映射多对多映射cookies 和 sessioncookiessession 会话控制 admin 后台数据库管理 django 提供了比较完善的后台管理数据库的接口,可供开发过...

纸鸢栀年°的博客 602

TYPE-C接口电路设计篇(一)

常见USB接口类型 随着USB Type-C接口的推行,USB Type-C是一种通用串行总线(USB)的硬件接口形式,USB Type-C接口在消费类产品普及程度越来越高,常见的适配器、笔电、手机等产品都兼容USB Type-C设计,接口多元化逐渐趋向归一,从而可以看出USB Type-C的重要性。 在了解USB Type-C接口之前,我们先来回顾下USB Type-A和USB Type-B接口,USB3.0 Type-A和Type-B接口定义分别如下。 USB 3.0...

JWu的博客 3万+

Django Web框架05

《Django Web框架教学笔记》 目录 文章目录《Django Web框架教学笔记》目录admin 后台数据库管理注册自定义模型类修改自定义模型类的展现样式模型管理器类再谈Meta类一对多映射多对多映射cookies 和 sessioncookiessessionCookies vs session admin 后台数据库管理 以电商网站,例如淘宝为例: 前台:面向广大用户访问和使用.页面新颖,功能较多.例如:浏览商品,添加购物车,支付购买等. 后台:面向淘宝公司员工.功能一般是固定化的,例如:商品的管

qq_41302958的博客 508

OpenAI Error: 403 Country, region, or territory not supported [Python]

从OpenAI的API服务中获取数据时,由于你所在的国家、地区或领土不被支持,因此请求被拒绝了

suiusoar 5668

【推荐100个unity插件】对话系统插件——YarnSpinner-Unity插件

Yarn Spinner是一款专为游戏对话设计的脚本语言,适用于Unity等引擎。本文介绍了在Unity中安装和使用Yarn Spinner的完整流程:首先通过Package Manager添加仓库并安装插件;然后创建Yarn Script和Project文件,配置对话系统;接着编写Yarn脚本定义对话内容,并展示运行效果;最后讲解了按键控制和多语言本地化设置。该工具采用类似剧本的简洁格式,支持分支对话、条件逻辑等功能,能有效提升游戏叙事的开发效率。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2214

web项目 day05(一)

VIP 模块开发及日志处理 VIP、权限模块功能 VIP 分类 非会员 一级会员 二级会员 三级会员 权限分类 超级喜欢 每日反悔 3 次 查看喜欢过我的人 权限分配 非会员: 无任何权限 一级会员: 超级喜欢 二级会员: 超级喜欢 + 反悔3次 三级会员: 超级喜欢 + 反悔3次 + 查看喜欢过我的人 开发难点 User 与 VIP 的关系 一种 VIP 对应多个 Us... RBAC权限管理模型

沉觞的博客 158

【agent实战教程】OpenClaw多个agent一文通

一个合格的独立agent,必须具备6个完全独立的专属组件独立组件路径规则核心要求不独立的严重后果唯一agentId配置文件中全局唯一,不能重复,建议用英文+数字,不要有特殊字符agent配置冲突,消息派单错误,会话串线独立工作区(workspace)建议每个agent一个独立文件夹,不要共用人设、记忆、规则混在一起,agent人设崩塌,对话串线独立状态目录(agentDir)固定系统自动生成,绝对禁止多个agent复用同一个agentDir。

海兰 649

Util 应用框架安装与配置指南

Util 是一个 .NET 平台下的应用框架,旨在提升中小团队的开发能力。它由工具类、分层架构基类、UI组件、配套代码生成模板、权限管理等组成。本文将从零开始详细介绍 Util 框架的安装与配置过程。 ## 环境要求 在开始安装 Util 框架之前,请确保您的开发环境满足以下要求: | 组件 | 版本要求 | 说明 | |------|----------|------| | .NET SD...

gitblog_00759的博客 1015

scratch绘制四个三角形 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

​ scratch绘制四个三角形 一、题目要求 2024年6月电子学会图形化编程Scratch等级考试二级真题 1、准备工作 1.保留默认角色小猫; 2.添加背景Stars。 2、功能实现 1 .隐藏角色小猫,设置画笔裙始位置为(0,0),画笔颜色为黄色,画笔的粗细为5; 2. 点击绿旗,绘制如下图所示图形,三角形的边长为50。 二、案例分析 1、角色分析 角色:小猫 2、背景分析 背景:Stars背景 3、前期准备 1. 保留默认的小猫不变 ​

青少年编程学习指导 1717

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)

Python Django框架下简单的MySQL数据展示实战 需求:将数据库中的一个库内的单表数据展示在网页首页,该表有id列,名字列,学号列三个列,并有简单的逻辑:能修改单行内的名字和学号,能删除任意的行,修改和删除后仍然自动跳转到展示页。没有分页,权限管理等功能,仅仅是个简单的展示、 删除后: ...

zsk_john的技术分享专用博客 6472

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MIUI Core Magisk模块:跨平台工具实现非MIUI系统功能扩展指南

MIUI Core Magisk模块作为一款强大的跨平台工具,通过**框架移植**技术实现了MIUI核心功能在非MIUI系统上的完整运行。该工具突破系统壁垒,提供卓越的**系统兼容性**,让原生Android或其他定制ROM用户也能体验MIUI独特功能生态。 ## 核心价值解析:为什么选择MIUI Core Magisk模块 💡 **核心价值1:系统级框架整合** 模块整合了MIUI完整

gitblog_00186的博客 479

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

多智能体系统权限管理终极指南:基于RBAC的安全访问控制完整方案

在当今复杂的多智能体系统环境中,确保安全的访问控制至关重要。agno作为高性能多智能体系统运行时,提供了基于RBAC(Role-Based Access Control)的完整权限管理解决方案,帮助开发者构建安全可控的智能体协作环境。本文将详细介绍如何在agno中实现RBAC权限控制,从基础配置到高级应用,为你的多智能体系统提供全面的安全保障。 ## 为什么RBAC是多智能体系统的安全基石 多

gitblog_01125的博客 366

#渗透测试#SRC漏洞挖掘#红蓝攻防#黑客工具之Burp Suite介绍05-网页端抓包与app小程序渗透01

代理是一种设计模式,它允许代理对象在某些情况下替代实际对象进行操作。代理模式的核心思想是通过代理对象来控制对实际对象的访问,从而实现对实际对象的保护、增强或限制等功能。代理模式在软件开发中广泛应用,特别是在需要对对象的访问进行控制、延迟加载、安全控制等场景下。

soc的博客 1619

Springboot计算机毕业设计在线考试系统69ozw#调试部署#程序

随着互联网技术的快速发展,全球经济一体化促进了管理信息化的发展。特别是在教育领域,传统的纸质考试方式在效率、便捷性和环境友好性等方面逐渐显露出局限性。特别是在2020年新型冠状病毒疫情的爆发,使得线下考试受到严重影响,远程教育成为现代教育技术的重要发展方向。在线考试系统作为远程教育的一个子系统,成为了一个重要的研究领域。

CK3037的博客 1096

轻量化企业后台管理系统(可自取)

本文档介绍了一个基于Vue 3 + TypeScript + Vite构建的企业后台管理系统,包含RBAC权限管理、用户管理、部门管理等功能模块。系统采用现代化技术栈,包括Element Plus、Pinia、Axios等,具有良好的扩展性和可维护性。文档详细说明了项目结构、核心功能、开发规范、构建部署方式以及系统架构,并提供了安装运行指南和扩展建议。该系统遵循前端开发最佳实践,适合作为企业级应用框架。

liuliyueliuli的博客 723

智慧水务项目(三)django(drf)+angular 18 创建系统管理的用户、角色、部门、权限管理等model

添加各model添加requirement.txt中的库添加env.py中的动态配置。

浪淘沙jkp的专栏 560

【程序源代码】开源OA办公系统

功能丰富,内置了工作流引擎、审批流、表单设计、钉钉管理等多种功能,能够满足企业日常办公的多种需求。数据互通:通过与钉钉办公的对接,实现了数据互通,有效解决了企业零碎化办公的问题,提高了工作效率。权限管理:支持多维度管理,包括部门/用户/角色/公司/岗位/门店/项目。库存管理:适配生产/维修/零售等企业,包含入库、盘点、调拨等功能。项目管理:简洁的项目管理体系,包含项目管理/项目文件/项目分类。钉钉同步:支持钉钉配置登录,同步钉钉部门/用户/角色。自定义表单:一次配置,表单/表格/搜索一步生成。

程序源代码 1187

vue+gin golang快速开发全栈后台管理系统模板推荐

本项目主要是小弟在接各种私活的时候发现频繁得书写CURD、权限管理、用户管理、列表、分页、上传下载、日志包封装、文档自动化等等功能 为了方方便各位个人开发者快速搭建项目基础模型,于是开发本模板,也为了以后自己可以剩下一些初期开发的功夫 本身是前端出身,所以对于后端的项目目录或者架构可能偏向前端思维,如果有什么地方需要改动感谢大家iss 强烈希望在各位的帮助下,此项目可以用于企业级项目的开发

a303176530的博客 4586

TradingAgents-CN:基于多智能体LLM的终极金融交易框架完整指南

在当今快速发展的金融科技领域,**TradingAgents-CN** 作为一款基于多智能体大语言模型的智能交易框架,为中文开发者提供了强大的股票分析与策略研究工具。这个开源项目不仅继承了原版 TradingAgents 的核心架构,还针对中文市场进行了深度优化和功能增强,成为学习AI金融技术的理想平台。 ## 🏗️ 系统架构解析:从数据采集到智能决策 TradingAgents-CN 采用

gitblog_00727的博客 498

实战篇10如何使用系统篇和模型篇:DBGPT 企业级管理系统使用指南

DBGPT企业级管理系统提供完整的权限管控与安全配置方案,核心功能包括:1)多层级用户角色管理,支持按岗位定义细粒度权限;2)YAML格式的权限模板配置,实现数据访问精确控制;3)安全策略强化,包含会话超时、密码强度等参数。系统支持知识库路径、模型服务等全局配置,内置敏感操作审计日志。常见问题排查涵盖权限异常、模型服务故障等场景,提供命令行诊断工具。该系统采用分级权限架构,支持GPU加速,适用于企业级AI应用部署与管理。

omonday1234的专栏 755
上一篇: 框架模块说明 #04 权限管理_01
下一篇: 框架模块说明 #05 权限管理_03
悠悠龙龙
博客等级 码龄14年 157粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值