框架说明

该框架是本人学习过程中本着只有自己动手操作一遍才能真正理解,和遇到对应问题并解决问题的思路。和为了能在开发相应系统时能快速搭建出相关框架而做出的基于NetCore3.1+Vue的RBAC通用权限框架。

只有在敲的过程中才能遇见细节上的问题,成长无非就是发现问题、思考问题、解决问题、总结沉淀,后面才能去规避和提高代码质量。

如有发现什么错误,请联系我,将第一时间改正。互相学习,共同进步。

不要只光看,最终要的是要自己敲,不自己敲的话,当遇到了还是不会、一脸懵的!

前端测试地址 lion.levy.net.cn , 可以自己注册,也可使用已有账号密码登录。请不要用已有账号修改或删除系统已有数据,谢谢配合

前端代码地址 Gitee GitHub

后端接口地址 lion.levy.net.cn

后端代码地址 Gitee GitHub

** 如果您觉得对您有帮助的话,可以给个start,谢谢 **

项目框架图

EntityFrameworkCore CodeFirist开发 支持 MySql/SqlServer

数据迁移时自动生成种子数据,Quartz 表结构还请自行通过docs文件中对应数据库类型文件,执行添加表语句

异步 async/await 开发

采用类似仓储模式开发,封装底层常用数据库方法

Nlog日志记录,可记录请求日志/异常日志等,调试阶段打印SQL语句

支持AOP切面编程,如日志、缓存、事务处理等

权限管理系统支持多租户多权限管理,页面动态管理页面&按钮权限

采用自定义JWT身份认证,可自带参数,验证过期时间,滑动无感重新颁发Token

支持Redis 和 Memory 两种缓存

使用三方DI AutoFac,实行批量注册,支持属性注入

采用Automapper做对象映射,并支持扩展方法直接映射。

使用 Quartz.net做任务调度,支持集群调度(未测试该情况,代码中有注释说明),支持反射调用本地程序集方式,支持调用API方式

使用Swagger提供API文档,并实现接口文档中填写授权信息方便调试。

支持CORS跨域,当前使用的是全跨域模式。

支持监控心跳检查HealthChecks,可实现对其它网页或服务的检查和通知。(代码没写,如需要,可联系我获取。通知支持钉钉和企业微信等)

支持RabbitMq消息队列,实现了死信队列和延迟队列。

支持docker部署,支持docker中部署同一网段

可配合Jenkins加 Sonar 做CI/CD & 代码质量检查

Nginx可配置实现负载均衡

可配置 IpRateLimiting 做API限流处理(此前配置试过,没有起到效果,可能哪个地方冲突了),若需要,也可根据redis实现一个简易版的

多租户权限设计表

详细说明

Deleted、CreatedTime、CreatedBy、UpdatedTime、UpdatedBy 为常用表默认字段,可自行扩展增加Remark、Status、Sort等为表通用字段。特别说明,若数据量很大的表,可将非关键字段拆分出来,减小表大小,提高查询速度。

  • 数据都是按页存在,页存储空间有限,将非关键信息存另外的一个表,关键信息表所存数据页就少,查询速度就相应的提高了。 个人理解

Sys_Tenant租户表

  • 租户相当于是将系统租给某个公司使用,租户表管理公司企业信息,这里表结构只是给了一个示例。
  • 若有什么想要控制,就设计成相应的表,若数据资源固定则设计为字典表。
字段名 说明 类型 主键
TenantId 主键 bigint TRUE
TenantName 租户名称 nvarchar(50)
Remark 备注 nvarchar(32)
State 状态:1-启用;-1-禁用 int
CreatedTime 创建时间 datetime

sys_user用户表

字段名 说明 类型 主键
UserId 主键 bigint TRUE
TenantId 租户ID bigint
NickName 用户名 nvarchar(30)
PassWord 密码 nvarchar(512)
Email Email nvarchar(128)
Sex 性别:0-女;1-男 int
State 状态:1-启用;-1-禁用 int
CreatedTime 创建时间 datetime
CreatedBy 创建人 bigint
UpdatedTime 修改时间 datetime
UpdatedBy 修改人 bigint

Sys_Role角色表

字段名 说明 类型 主键
RoleId 主键 bigint TRUE
TenantId 租户ID bigint
RoleName 角色名称 nvarchar(25)
RoleDesc 角色描述 nvarchar(128)
Deleted 逻辑删除标志 tinyint
CreatedTime 创建时间 datetime
CreatedBy 创建人 bigint
UpdatedTime 修改时间 datetime
UpdatedBy 修改人 bigint

Sys_User_Role_Relation用户角色关系表

字段名 说明 类型 主键
UserId 用户ID bigint TRUE
RoleId 角色Id bigint TRUE
TenantId 租户ID bigint TRUE
State 状态:1-启用;-1-禁用 int
Deleted 逻辑删除标志 tinyint
CreatedTime 创建时间 datetime
CreatedBy 创建人 bigint
UpdatedTime 修改时间 datetime
UpdatedBy 修改人 bigint

Sys_Menu权限资源表

字段名 说明 类型 主键
MenuId 主键,自定义 nvarchar(40) TRUE
MenuName 资源名称 nvarchar(64)
ParentMenuId 父级Id--无限级菜单(长度加大) nvarchar(40)
Level 菜单层级 int
Url 资源地址 nvarchar(256)
Type 资源类型:1:菜单 2:按钮 int
Icon 图标 nvarchar(128)
OrderIndex 顺序 int
Deleted 逻辑删除标志 tinyint
CreatedTime 创建时间 datetime
CreatedBy 创建人 bigint
UpdatedTime 修改时间 datetime
UpdatedBy 修改人 bigint

Sys_Role_Menu_Relation角色资源关系表

字段名 说明 类型 主键
MenuId 资源ID nvarchar(40) TRUE
RoleId 角色Id bigint TRUE
TenantId 租户ID bigint TRUE
State 状态:1-启用;-1-禁用 int
Deleted 逻辑删除标志 tinyint
CreatedTime 创建时间 datetime
CreatedBy 创建人 bigint
UpdatedTime 修改时间 datetime
UpdatedBy 修改人 bigint
  • 调度相关-额外创建的管理表

Sys_Quartz调度任务综合表

字段名 说明 类型 主键
JobGroup 任务分组 nvarchar(200) TRUE
JobName 任务名称 nvarchar(200) TRUE
JobType 任务类型:0-无,1-api,2-程序集 int
BeginTime 开始时间 datetime
EndTime 结束时间 datetime
Cron Cron表达式 nvarchar(40)
RunTimes 执行次数 int
IntervalSecond 循环次数 int
TriggerType 任务类型:0-无,1-cron,2-简单类型 int
RequestPath API地址或请求类程序集名称 nvarchar(56)
RequestMethod API请求类型或请求类地址 nvarchar(40)
RequestParameters 请求Body参数 nvarchar(512)
Headers 请求头参数 nvarchar(256)
Priority 执行优先级,等级越高,相同时间先执行 int
Description 任务描述 nvarchar(256)
NotifyEmail 通知邮箱 nvarchar(128)
MailMessage 邮件通知类型:0-不通知,1-错误通知,2-全量通知 int
TriggerState 暂停 错误 阻塞 完成 等 int
PreviousFireTime 上次执行时间 datetime
NextFireTime 下次执行时间 datetime
CreatedTime 创建时间 datetime

效果图

当用户注册使用,便是一个租户,租户也就代表是一个公司群体,可以以该账号创建子账号,给子账号分配页面及按钮权限。

接口文档

用户界面

角色管理界面

系统管理菜单界面

调度任务界面

调度-接口及cron界面

调度-程序集反射方式创建界面

调度日志界面

后端拉取运行

  • 需配置appsettings.json中的相关信息 配置邮箱发送人信息,本项目配置的是QQ邮箱,请根据需要配置,用以注册和找回密码的短信发送

  • 需配置appsettings.json中的相关信息 配置数据库链接信息,执行数据库迁移命令(查看第7点),执行完成后,根据doc文件中选择Quartz对应数据库脚本语言创建相关表。

  • 配置NLog.config文件数据库相关信息,用于记录日志,根据使用数据库选择相应链接,并配置数据库链接

  • 需配置appsettings.json中的相关信息 Redis链接信息

  • 需配置appsettings.json中的相关信息 RabbitMQ链接信息

  • 需配置appsettings.json中的相关信息 Redis链接信息

  • LionFrame.Data项目中有个种子数据文件夹,在数据迁移时会添加相关信息

前端项目请参考 前端系列

在博客中之前已经写过前端系列,可参考下,有不清楚的地方可在个人简介中找到我的联系方式。若有什么错误的地方也欢迎指正~

发布到docker中

可参考项目中的docs文件夹下的 同一网络部署到Docker中 文件。因为我这边redis和mysql已经在之前就已经创建过了,所以此次只做了 MQ和项目发布到同一网段中,其它的可如法炮制。喜欢玩的也可以使用docker-compose来进行编写第一次的发布脚本,因为多环境的问题,建议使用docker-compose,可快速的进行部署,也可避免命令敲错等情况。

只有初次发布时配置可能比较麻烦,后面基本就只有项目需要多次发布,可引入jenkins 做 CI/CD,基本支持中小企业使用

若项目做的比较大可升级K8S,做弹性伸缩,nginx做负载均衡等等、

前端项目这里由于是腾讯云的学生服务器,比较卡顿,故申请了一个腾讯云的免费6个月的存储桶COS进行发布前端项目。

netcore3.1 发布到docker中所遇到的坑及解决

由于docker中没有图片的依赖组件,在我们生成二维码的时候的时候需要使用到System.Drawing.Common 来使用 Image、Bitmap 等类型,通过docker logs 可查看到如下异常

System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.

解决方法,在dockerfile中加上如下语句RUN apt-get update && apt-get install -y libgdiplus

由于国内网络原因,此处可能需要下载数十分钟,为了提高数据,可在dockerfile中加上RUN cp sources.list /etc/apt/一句话,使用镜像源,来提高下载速度,sources.list文件在docs文件夹中有提供。

这样就能解决图片的问题

ps:小插曲,其实最开始我在这样处理后还是不能生成图片、日志中也看不到错误,只知道容器在调用二维码生成接口时就会退出,起先还以为是dockerfile引入有问题,

在各大网站查找相关讯息,博客园/csdn/stackoverflow/github等网站上查找。

在这个网址上 https://github.com/dotnet/dotnet-docker/issues/618 看到人家都是这样解决的,为啥我就不行

不禁陷入了沉思,突然想到可能是代码的问题,换了生成验证码的方式, 惊奇的发现可以了。有的时候得换一种思考的方式。

原文地址

NetCore3.1及Vue开发通用RBAC前后端通用框架的更多相关文章

  1. 如何利用vue和php做前后端分离开发?

    新手上路,前端工程师,刚毕业参加工作两个月,上面让我用vue搭建环境和php工程师一起开发,做前后端分离,然而我只用过简单的vue做一些小组件的经验,完全不知道怎样和php工程师配合,ps: php那 ...

  2. .Net Core+Vue.js+ElementUI 实现前后端分离

    .Net Core+Vue.js+ElementUI 实现前后端分离 Tags: Vue 架构 前端采用:Vue.js.Element-UI.axios 后端采用:.Net Core Mvc 本项目是 ...

  3. 使用Vue开发微信小程序:mpvue框架

    使用Vue开发微信小程序:mpvue框架:https://www.jianshu.com/p/8f779950bfd9

  4. Thinkphp5.0+Vue2.0前后端分离框架Vuethink

    VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的vue-cli脚手架工具构建 ...

  5. [原创]基于VueJs的前后端分离框架搭建之完全攻略

    首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...

  6. 前后端分离框架前端react,后端springboot跨域问题分析

    前后端分离框架前端react,后端springboot跨域问题分析 为啥跨域了 前端react的设置 springboot后端设置 为啥跨域了 由于前后端不在一个端口上,也是属于跨域问题的一种,所以必 ...

  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史

    ---新内容开始--- 番外 大家周一好呀,又是元气满满的一个周一呀!感谢大家在周一这个着急改Bug的黄金时期,抽出时间来看我的博文哈哈哈,时间真快,已经到第十四篇博文了,也很顺顺(跌跌)利利 (撞撞 ...

  8. com.panie 项目开发随笔_前后端框架考虑(2016.12.8)

    (一) 近日和一同学联系,说了我想要做一个网站的打算.她很感兴趣.于是我们协商了下,便觉得一起合作.她写前端,我写后台.因为我对于前端样式设计并不怎么熟悉. (二) 我们决定先做一个 个人博客. 网上 ...

  9. vue.js+UEditor集成 [前后端分离项目]

    首先,谈下这篇文章中的前后端所涉及到的技术框架内容. 虽然是后端的管理项目,但整体项目,是采用前后端分离的方式完成,这样做的目的也是产品化的需求: 前端,vue+vuex+vue router+web ...

随机推荐

  1. Flutter教程- Dart语言规范-知识点整理

    Flutter教程- Dart语言知识点整理 Dart语言简介 Dart语言介绍 ① 注释的方式 ② 变量的声明 ③ 字符串的声明和使用 ④ 集合变量的声明 ⑤ 数字的处理 ⑥ 循环的格式 ⑦ 抛异常 ...

  2. Hznu_0j 1557

    题目链接:http://acm.hznu.edu.cn/OJ/problem.php?id=1557 题解:将两个数组分别升序和降序排序后,累加差的绝对值. Ac代码: #include<std ...

  3. Error message: Failed to spawn: unable to access process with pid 413 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root

    Android 8.0 在frida中使用 -f 参数报错, Error message: Failed to spawn: unable to access process with pid 413 ...

  4. (二)SpringBoot启动过程的分析-环境信息准备

    -- 以下内容均基于2.1.8.RELEASE版本 由上一篇SpringBoot基本启动过程的分析可以发现在run方法内部启动SpringBoot应用时采用多个步骤来实现,本文记录启动的第二个环节:环 ...

  5. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  6. Bug Hunt UVA - 1596

      In this problem, we consider a simple programming language that has only declarations of onedimens ...

  7. Word 查找和替换字符串方法

    因为项目需要通过word模板替换字符串 ,来让用户下载word, 就在网上找了找word查找替换字符串的库或方法,基本上不是收费,就是无实现,或者方法局限性太大 .docx 是通过xml来存储文字和其 ...

  8. SpringBoot自动装配,比较全的吧,来看看吧~

    文章挺长,表达不好,希望能有获~~~~~~~ Spring也提供使用注解来注册bean,为什么要用SpringBoot呢? 使用Spring应用,比如SpringMVC还行需要配置ViewResolv ...

  9. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

  10. mooc人大单元测试2

    1 单选(2分) 下列选项中不是关系数据库基本特征的是(  ). A. 不同的列应有不同的数据类型 B. 不同的列应有不同的列名 C. 与行的次序无关 D. 与列的次序无关 2 单选(2分) 关系代数 ...