开源、有文档、能上线的 .NET + Vue 通用权限系统
前言在日常项目开发中权限管理几乎是每个系统都绕不开的基础模块。从用户登录、菜单控制到数据隔离一套稳定、灵活、可扩展的权限体系往往决定了整个项目的成败。然而从零开始搭建这样的平台不仅耗时耗力还容易在细节上踩坑。本文推荐一个轻量级但功能完整的 .NET 快速开发框架采用前后端分离架构开箱即用帮大家快速开发通用权限管理系统。项目介绍一套基于.NET 和 Vue.js 的全栈权限管理平台。后端采用分层架构设计前端基于 vue-cli 4.0 脚手架生成整体结构清晰、职责分明。项目不追求大而全而是聚焦于能用、好用、可维护特别适合中小型项目或需要快速交付的内部系统。不管是新团队启动项目还是老系统重构都能提供一个坚实且灵活的起点。项目功能用户、角色、部门、岗位、组织五层权限模型支持复杂的企业架构系统功能菜单与按钮级权限配置实现细粒度访问控制数据字典、编码规则、行政区域等基础数据管理定时任务可视化配置基于 Quartz 实现后台调度系统日志与调度监测记录操作行为并以图表形式展示接口调用趋势代码生成器根据数据库表自动生成实体、仓储和基础 CRUD 接口报表支持GridReport6和Excel 导入导出Magicodes满足业务报表需求应用接入管理支持多租户或多系统集成场景。项目框架项目说明分层架构├─ RayD.Core // 框架核心层 ├─ RayD.Repository // 数据仓储层 ├─ RayD.App // 业务应用层实现具体业务逻辑 ├─ RayD.App.Extra // 应用扩展层Excel导入导出、定时作业等扩展功能 ├─ RayD.App.Setup // 应用配置层为 Startup.cs 提供配置方法 ├─ RayD.IMServer // 即时通讯服务 └─ RayD.WebApi // 表现层Web API 入口启动程序核心技术栈Autofac轻量级 IoC 容器替代 .NET Core 内置 DI 容器AOP通过切面实现日志记录、缓存等横切关注点JWT基于 JWT 的授权认证支持单点登录与滑动刷新令牌Swagger UI自动生成并可视化后端 API 接口文档MiniProfiler对接口性能进行实时可视化分析CORS提供简洁的跨域资源共享解决方案Quartz.NET实现定时任务调度Magicodes.IE支持 Excel 文件的高效导入导出EF Core Dapper 混合模式兼顾开发效率与 SQL 灵活性支持 SQL Server、Oracle、MySQL 等多数据库GridReport6客户端模式报表引擎用于复杂打印与报表场景前端项目结构├─ public/ │ └─ Report/ // GridReport6 报表文件存放目录 └─ src/ ├─ api/ // 接口集中管理与封装 ├─ assets/ // 静态资源图片、字体等 ├─ components/ // 公共组件 ├─ directive/ // 自定义 Vue 指令 ├─ pages/ // 公共页面组件如登录页、布局页 ├─ plugins/ // 第三方插件配置 ├─ router/ // 路由配置 ├─ store/ // Vuex 状态管理 ├─ styles/ // 全局样式与主题变量 ├─ util/ // 工具函数封装日期处理、请求拦截等 └─ views/ // 业务视图页面核心前端依赖名称版本用途说明axios0.19.0封装 HTTP 异步请求element-ui2.14.0基础 UI 组件库avue2.6.16基于 element-ui 的增强组件库主要用于树形选择器、动态表单等vxe-table2.9.12功能强大的表格组件支持编辑、分页、虚拟滚动等复杂场景v-charts1.19.0基于 ECharts 的图表组件封装vuex3.5.1全局状态管理项目使用环境要求.NET Core SDKNode.js含 npm启动后端服务1、执行数据库脚本db/rayd_dev.sql初始化数据库2、使用 Visual Studio 2019 或更高版本打开back-end/RayD.sln3、将RayD.WebApi设为启动项目4、修改appsettings.json中的数据库连接字符串5、按F5运行项目默认监听端口9080。启动前端服务1、使用 VS Code 或其他编辑器打开front-end目录2、在终端执行npm install3、安装完成后运行npm run serve4、前端默认启动端口8090浏览器访问http://localhost:8090即可进入系统。项目代码Quartz 定时作业public Task StartAsync(CancellationToken cancellationToken) { //启动定时job可以在这里配置读取数据库需要启动的任务然后启动他们 var jobList _jobService .GetList(null) .Where(c c.B_EnabledMark EnabledMark.Enabled c.B_JobTerminal AppSettings.JobOption.SubjectTerminal ); foreach (var job in jobList) { var jobBuilderType typeof(JobBuilder); var method jobBuilderType.GetMethods().FirstOrDefault( x x.Name.Equals(Create, StringComparison.OrdinalIgnoreCase) x.IsGenericMethod x.GetParameters().Length 0) ?.MakeGenericMethod(Type.GetType(job.B_JobCall)); var jobBuilder (JobBuilder)method.Invoke(null, null); IJobDetail jobDetail jobBuilder.WithIdentity(job.B_Id).Build(); jobDetail.JobDataMap[Define.JOBMAPKEY] job.B_Id; //传递job信息 ITrigger trigger TriggerBuilder.Create() .WithCronSchedule(job.B_Cron) .WithIdentity(job.B_Id) .StartNow() .Build(); _scheduler.ScheduleJob(jobDetail, trigger); } _scheduler.Start(); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _scheduler.Shutdown(); _logger.LogInformation(关闭定时job); return Task.CompletedTask; }项目接口文档项目效果用户登录后菜单和按钮根据权限动态加载操作日志实时记录定时任务可启停、可监控代码生成器几分钟内即可产出单表增删改查页面。尤其适合政府、教育、制造等对权限模型有明确层级要求的行业。系统登录系统首页敏捷开发系统管理组织架构定时任务组件示例系统日志项目源码项目完全开源结构规范注释完整。所有核心功能均有对应代码说明学习和二次开发门槛极低。Giteehttps://gitee.com/ld13750018815/rayd总结一个经过实战打磨的开发脚手架。它把权限管理中最繁琐、最易错的部分封装好让大家能把精力集中在真正的业务逻辑上。对于需要快速交付、又不想牺牲代码质量的团队来说它是一个非常实用的选择。如果大家正在找一个开源、有文档、能上线的 .NET Vue 权限平台可以试试这个项目。